亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? processinfo.cpp

?? Windows via C/C++, Fifth Edition圖書源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

///////////////////////////////////////////////////////////////////////////////


PVOID GetModulePreferredBaseAddr(DWORD dwProcessId, PVOID pvModuleRemote) {

   PVOID pvModulePreferredBaseAddr = NULL;
   IMAGE_DOS_HEADER idh;
   IMAGE_NT_HEADERS inth;

   // Read the remote module's DOS header
   Toolhelp32ReadProcessMemory(dwProcessId, 
      pvModuleRemote, &idh, sizeof(idh), NULL);

   // Verify the DOS image header
   if (idh.e_magic == IMAGE_DOS_SIGNATURE) {
      // Read the remote module's NT header
      Toolhelp32ReadProcessMemory(dwProcessId, 
         (PBYTE) pvModuleRemote + idh.e_lfanew, &inth, sizeof(inth), NULL);

      // Verify the NT image header
      if (inth.Signature == IMAGE_NT_SIGNATURE) {
         // This is valid NT header, get the image's preferred base address
         pvModulePreferredBaseAddr = (PVOID) inth.OptionalHeader.ImageBase;
      }
   }
   return(pvModulePreferredBaseAddr);
}


///////////////////////////////////////////////////////////////////////////////



/* 
   from  http://msdn.microsoft.com/msdnmag/issues/02/06/debug/
         Escape from DLL Hell with Custom Debugging and 
         Instrumentation Tools and Utilities

   The PEB (Process Environment Block) is an undocumented structure 
   which varies from version to version of Windows.
   However, WinDbg 
   (from http://www.microsoft.com/whdc/devtools/debugging/default.mspx) 
   provides a command that list the "documented" fields of a structure. 
      dt nt!_PEB 
      dt nt!_RTL_USER_PROCESS_PARAMETERS
*/

typedef struct
{
   DWORD Filler[4];
   DWORD InfoBlockAddress;
} __PEB;

typedef struct
{
   DWORD Filler[17];
   DWORD wszCmdLineAddress;
} __INFOBLOCK;



// NtQueryInformationProcess is declared in winternl.h
typedef NTSTATUS (CALLBACK *PFN_NTQUERYINFORMATIONPROCESS)(
   HANDLE ProcessHandle, 
   PROCESSINFOCLASS ProcessInformationClass,
   PVOID ProcessInformation,
   ULONG ProcessInformationLength,
   PULONG ReturnLength OPTIONAL
   );


NTSTATUS _NtQueryInformationProcess(
    HANDLE hProcess,
    PROCESSINFOCLASS pic,
    PVOID pPI,
    ULONG cbSize,
    PULONG pLength
    ) {
    
   HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll"));
   if (hNtDll == NULL) {
      return(-1);
   }

   NTSTATUS lStatus = -1;  // error by default.

   // Note that function name is not UNICODE
   PFN_NTQUERYINFORMATIONPROCESS pfnNtQIP = 
      (PFN_NTQUERYINFORMATIONPROCESS)GetProcAddress(
         hNtDll, "NtQueryInformationProcess");
   if (pfnNtQIP != NULL) {
      lStatus = pfnNtQIP(hProcess, pic, pPI, cbSize, pLength);
   }   
   
   FreeLibrary(hNtDll);
   return(lStatus);
}


BOOL GetProcessCmdLine(HANDLE hProcess, LPTSTR szCmdLine, DWORD Size) {

   // Sanity checks
   if ((hProcess == NULL) || (szCmdLine == NULL) || (Size == 0))
      return(FALSE);

   // 0. Get the Process Environment Block address
   int   iReturn = 1;
   DWORD dwSize;
   SIZE_T size;

   PROCESS_BASIC_INFORMATION  pbi;
   // The PEB was supposed to always be at address 0x7ffdf000 in XP...
   // ... but, here is the "right" way to get it now in Vista.
   iReturn =
      _NtQueryInformationProcess(
         hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), &dwSize);

   // NtQueryInformationProcess returns a negative value if it fails
   if (iReturn >= 0) {
      // 1. Find the Process Environment Block
      __PEB PEB;
	  size = dwSize;
      if (!ReadProcessMemory(hProcess, pbi.PebBaseAddress, &PEB, 
         sizeof(PEB), &size)) {
         // Call GetLastError() if you need to know why
         return(FALSE);
      }

      // 2. From this PEB, get the address of the block containing 
      // a pointer to the CmdLine
      __INFOBLOCK Block;
      if (!ReadProcessMemory(hProcess, (LPVOID)PEB.InfoBlockAddress, 
         &Block, sizeof(Block), &size)) {
         // Call GetLastError() if you need to know why
         return(FALSE);
      }

      // 3. Get the CmdLine
      wchar_t wszCmdLine[MAX_PATH+1];
      if (!ReadProcessMemory(hProcess, (LPVOID)Block.wszCmdLineAddress, 
         wszCmdLine, MAX_PATH*sizeof(wchar_t), &size)) {
         // Call GetLastError() if you need to know why
         return(FALSE);
      }

      // 4. Skip the application pathname
      //    it can be empty, "c:\...\app.exe" or c:\...\app.exe
      wchar_t* pPos = wszCmdLine;
      if (*pPos != L'\0') {
         if (*pPos == L'"') {
         // Find the next " character
            pPos = wcschr(&pPos[1], L'"');
         } else {
         // Find the next SPACE character
            pPos = wcschr(&pPos[1], L' ');
         }

         // Skip it
         if (pPos != NULL)
            pPos++;
      }

      // Copy it back
      if (pPos != NULL) {
         if (*pPos != L'\0') {
#ifdef UNICODE
            // Both strings are in UNICODE.
            _tcscpy_s(szCmdLine, Size, pPos);   
#else
            // from UNICODE to ANSI
            MultiByteToWideChar(CP_ACP, 0, szCmdLine, Size, 
               pPos, wcslen(pPos)); 
#endif
         }
         else
            szCmdLine[0] = TEXT('\0');
      }
      else
         szCmdLine[0] = TEXT('\0');
   }
   else {
      return(FALSE);
   }

   return(TRUE);
}


BOOL GetProcessCmdLine(DWORD PID, LPTSTR szCmdLine, DWORD Size) {

   // Sanity checks
   if ((PID <= 0) || (szCmdLine == NULL))
      return(FALSE);

   // Check if we can get information for this process
   HANDLE hProcess = 
      OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, PID);
   if (hProcess == NULL)
      return(FALSE);

   BOOL bReturn = GetProcessCmdLine(hProcess, szCmdLine, Size);

   // Don't forget to release the process handle
   CloseHandle(hProcess);

   return(bReturn);
}


BOOL GetProcessOwner(HANDLE hProcess, LPTSTR szOwner, size_t cchSize) {

   // Sanity checks
   if ((szOwner == NULL) || (cchSize == 0))
      return(FALSE);

   // Default value
   szOwner[0] = TEXT('\0');

   // Gget process token
   HANDLE hToken = NULL;
   CToolhelp::EnablePrivilege(SE_TCB_NAME, TRUE);
   if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {
      CToolhelp::EnablePrivilege(SE_TCB_NAME, FALSE);
      return(FALSE);
   }

   // Obtain the size of the user information in the token.
   DWORD cbti = 0;
   GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti);

   // Call should have failed due to zero-length buffer.
   if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
      // Allocate buffer for user information in the token.
      PTOKEN_USER ptiUser = 
         (PTOKEN_USER)HeapAlloc(GetProcessHeap(), 0, cbti);
      if (ptiUser != NULL) {
         // Retrieve the user information from the token.
         if (GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti)) {
            SID_NAME_USE   snu;
            TCHAR          szUser[MAX_PATH];
            DWORD          chUser = MAX_PATH;
            PDWORD         pcchUser = &chUser;
            TCHAR          szDomain[MAX_PATH];
            DWORD          chDomain = MAX_PATH;
            PDWORD         pcchDomain = &chDomain;

            // Retrieve user name and domain name based on user's SID.
            if (
                  LookupAccountSid(
                     NULL,
                     ptiUser->User.Sid,
                     szUser,
                     pcchUser,
                     szDomain,
                     pcchDomain,
                     &snu
                     )
               ) {
               // build the owner string as \\DomainName\UserName
               _tcscpy_s(szOwner, cchSize, TEXT("\\\\"));
               _tcscat_s(szOwner, cchSize, szDomain);
               _tcscat_s(szOwner, cchSize, TEXT("\\"));
               _tcscat_s(szOwner, cchSize, szUser);
            }
         }

         // Don't forget to free memory buffer
         HeapFree(GetProcessHeap(), 0, ptiUser);
      }
   }

   // Don't forget to free process token
   CloseHandle(hToken);

   // Restore privileges
   CToolhelp::EnablePrivilege(SE_TCB_NAME, TRUE);

   return(TRUE);
}


BOOL GetProcessOwner(DWORD PID, LPTSTR szOwner, DWORD cchSize) {

   // Sanity checks
   if ((PID <= 0) || (szOwner == NULL))
      return(FALSE);

   // Check if we can get information for this process
   HANDLE hProcess = 
      OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, PID);
   if (hProcess == NULL)
      return(FALSE);

   BOOL bReturn = GetProcessOwner(hProcess, szOwner, cchSize);

   // Don't forget to release the process handle
   CloseHandle(hProcess);

   return(bReturn);
}


VOID FormatSizeInKB(DWORD dwSize, DWORD nCharacters, 
   LPTSTR szSize, size_t cchSize) {
   
   TCHAR szFormattedSize[64];
   if (StrFormatKBSize(dwSize, szFormattedSize, 
      _countof(szFormattedSize)) == NULL) {
      StringCchPrintf(szFormattedSize, _countof(szFormattedSize), TEXT("%8u"), dwSize); 
   }

   // Format to the right nCharacter width if needed.
   if (_tcslen(szFormattedSize) < nCharacters) {
      DWORD current = 0;
      for(current = 0; 
         current < (nCharacters - _tcslen(szFormattedSize)); 
         current++) {
         szSize[current] = TEXT(' ');
      }
      szSize[current] = TEXT('\0');      

      _tcscat_s(szSize, cchSize - current, szFormattedSize);
   }
}

VOID ShowProcessInfo(HWND hwnd, DWORD dwProcessID) {

   SetWindowText(hwnd, TEXT(""));   // Clear the output box

   CToolhelp th(TH32CS_SNAPALL, dwProcessID);

   // Show Process details
   PROCESSENTRY32 pe = { sizeof(pe) };
   BOOL fOk = th.ProcessFirst(&pe);
   for (; fOk; fOk = th.ProcessNext(&pe)) {
      if (pe.th32ProcessID == dwProcessID) {
         TCHAR szCmdLine[1024];
         if (GetProcessCmdLine(dwProcessID, szCmdLine, _countof(szCmdLine))) {
            AddText(hwnd, 
               TEXT("Command line: %s %s\r\n"), pe.szExeFile, szCmdLine);
         } else {
            AddText(hwnd, TEXT("Filename: %s\r\n"), pe.szExeFile);
         }
         AddText(hwnd, TEXT("   PID=%08X, ParentPID=%08X, ")
            TEXT("PriorityClass=%d, Threads=%d, Heaps=%d\r\n"),
            pe.th32ProcessID, pe.th32ParentProcessID, 
            pe.pcPriClassBase, pe.cntThreads,
            th.HowManyHeaps());
         TCHAR szOwner[MAX_PATH+1];
         if (GetProcessOwner(dwProcessID, szOwner, MAX_PATH)) {
            AddText(hwnd, TEXT("Owner: %s\r\n"), szOwner);
         }

         break;   // No need to continue looping
      }
   }


   // Show Modules in the Process
   // Number of characters to display an address
   AddText(hwnd, TEXT("\r\nModules Information:\r\n")
      TEXT("  Usage  %-*s(%-*s)  %10s  Module\r\n"),
      s_cchAddress, TEXT("BaseAddr"),
      s_cchAddress, TEXT("ImagAddr"), TEXT("Size"));

   MODULEENTRY32 me = { sizeof(me) };
   fOk = th.ModuleFirst(&me);
   for (; fOk; fOk = th.ModuleNext(&me)) {
      if (me.ProccntUsage == 65535) {
         // Module was implicitly loaded and cannot be unloaded
         AddText(hwnd, TEXT("  Fixed"));
      } else {
         AddText(hwnd, TEXT("  %5d"), me.ProccntUsage);
      }

      // Try to format the size in kb.
      TCHAR szFormattedSize[64];
      if (StrFormatKBSize(me.modBaseSize, szFormattedSize, 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久毛片软件| 老司机精品视频线观看86| 五月婷婷综合激情| 国产精品亚洲专一区二区三区| 色欧美日韩亚洲| 国产三级一区二区| 蜜臀av一区二区| 欧美视频在线一区| 国产精品久久久久久久久晋中| 美国一区二区三区在线播放| 色综合久久久久久久久久久| 久久久久久亚洲综合影院红桃| 日韩成人免费看| 欧美三级视频在线观看| ㊣最新国产の精品bt伙计久久| 国产乱理伦片在线观看夜一区| 91麻豆精品国产91久久久久久久久| 成人免费一区二区三区视频| 国产乱码精品1区2区3区| 日韩免费在线观看| 免播放器亚洲一区| 欧美一区二区久久久| 一区二区三区产品免费精品久久75| 国产成人99久久亚洲综合精品| 日韩欧美一级精品久久| 无码av中文一区二区三区桃花岛| 欧美性色aⅴ视频一区日韩精品| 亚洲人成伊人成综合网小说| 99久久久久久| 亚洲精品一二三区| 色偷偷一区二区三区| 精品一区二区在线播放| 日韩午夜小视频| 久国产精品韩国三级视频| 精品国产污网站| 国产真实乱对白精彩久久| 久久精品视频网| 国产福利一区二区| 国产精品久久久久久妇女6080| 成人精品在线视频观看| 亚洲美女区一区| 欧美日韩精品福利| 日韩国产在线观看一区| 日韩欧美不卡一区| 国产成人鲁色资源国产91色综| 国产精品欧美一区喷水| 99国产精品久久久久久久久久| 亚洲欧美aⅴ...| 欧美精品三级在线观看| 精品一区免费av| 国产精品短视频| 欧美日韩精品三区| 久久www免费人成看片高清| 国产亚洲精久久久久久| 色婷婷av一区二区三区大白胸| 五月天一区二区| 久久精品人人做人人综合 | 欧美精品一区二区三区蜜臀| 国产一区二三区好的| √…a在线天堂一区| 欧美日韩精品二区第二页| 精油按摩中文字幕久久| 亚洲丝袜精品丝袜在线| 日韩三级中文字幕| 成人sese在线| 日韩av电影一区| 日本一二三四高清不卡| 欧美日韩国产天堂| 东方aⅴ免费观看久久av| 亚洲国产va精品久久久不卡综合| 久久综合99re88久久爱| 欧美视频一二三区| 福利一区在线观看| 五月天中文字幕一区二区| 欧美激情一区二区三区蜜桃视频| 欧美在线不卡一区| 国产精品91xxx| 亚洲国产精品久久一线不卡| 欧美激情一二三区| 91精品综合久久久久久| 97久久人人超碰| 国内久久精品视频| 亚洲chinese男男1069| 国产精品色哟哟网站| 精品少妇一区二区三区在线播放 | 欧美一级欧美一级在线播放| 成人激情av网| 国产一区二区三区高清播放| 午夜一区二区三区视频| 亚洲人午夜精品天堂一二香蕉| 久久这里只有精品首页| 91精品免费在线观看| 久久女同互慰一区二区三区| 欧美日韩中文字幕精品| 91亚洲午夜精品久久久久久| 国产美女视频91| 另类专区欧美蜜桃臀第一页| 亚洲一区电影777| 亚洲乱码国产乱码精品精可以看 | 欧美在线视频你懂得| 丁香网亚洲国际| 国产美女视频一区| 国产精品自拍三区| 韩日av一区二区| 精品一区二区三区日韩| 奇米一区二区三区| 奇米影视一区二区三区小说| 亚洲成人免费在线观看| 国产精品成人免费在线| 中文字幕免费观看一区| 欧美国产国产综合| 国产精品久99| 亚洲欧洲三级电影| 亚洲色图欧美在线| 亚洲视频每日更新| 亚洲欧美激情小说另类| 成人免费一区二区三区在线观看 | 91丨九色丨蝌蚪富婆spa| 高清成人免费视频| www.亚洲激情.com| eeuss鲁片一区二区三区在线看| kk眼镜猥琐国模调教系列一区二区 | 国产精品一区免费在线观看| 国产在线精品一区二区不卡了| 激情综合五月婷婷| 国产精品一区二区在线播放| 国产91富婆露脸刺激对白| 99久久精品一区| 欧美综合一区二区三区| 日韩视频免费观看高清完整版| 日韩欧美在线观看一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 日韩女优av电影| 国产精品欧美久久久久一区二区| 亚洲欧美另类久久久精品2019| 亚洲综合在线视频| 久久精品999| 国产精品一卡二| 日本精品视频一区二区| 日韩一卡二卡三卡国产欧美| 久久久蜜桃精品| 亚洲日本在线视频观看| 天天色天天爱天天射综合| 国产在线播放一区三区四| 成人av在线看| 5858s免费视频成人| 久久综合色8888| 亚洲精品欧美二区三区中文字幕| 日韩国产精品久久| 国产成人一级电影| 欧美日韩精品一区视频| 国产人伦精品一区二区| 一二三四区精品视频| 久久99国产精品久久99果冻传媒| 91在线观看美女| 精品国产凹凸成av人导航| 亚洲人成网站色在线观看| 久久99久久精品| 在线观看亚洲精品| 国产日本欧美一区二区| 日韩av网站在线观看| 亚洲精品在线免费播放| 亚洲色图色小说| 国产精品综合久久| 欧美日韩精品专区| 亚洲视频免费看| 国产成人高清在线| 日韩一区二区三| 亚洲成人一区在线| 不卡一区二区中文字幕| 精品国一区二区三区| 一区二区三区久久久| eeuss鲁一区二区三区| 久久久精品免费网站| 免费看精品久久片| 欧美三级电影在线观看| 综合激情网...| 波多野结衣一区二区三区| 2024国产精品| 捆绑调教美女网站视频一区| 色婷婷综合久久| 亚洲视频每日更新| 成人av中文字幕| 国产精品欧美经典| 成人在线视频首页| 精品久久国产老人久久综合| 日韩综合在线视频| 欧美日韩在线播放一区| 亚洲小说欧美激情另类| 在线影院国内精品| 一区二区三区小说| 91影视在线播放| 亚洲精品国久久99热| 91在线视频播放地址| 国产精品久久久99| 91麻豆精品一区二区三区| 中国色在线观看另类| 成人国产精品免费网站| 1000精品久久久久久久久| 一本色道久久综合狠狠躁的推荐|