問題主要在標題中。我試圖使用這個方法撰寫一個示例,但是當我使用 ALL 標志和行程的句柄來運行它時,我得到了一個-1的回傳值,而不是一個有效的快照句柄,而且當呼叫 GetLastError 時,我得到了 2(系統無法找到指定的檔案)
。我的問題是,MSDN 鏈接中提到的 th32ProcessID 是指一個正常的行程句柄,還是有不同的方法來獲得這個行程 ID?
我現在沒有大量的代碼,但我有以下的代碼:
我有大量的代碼。
[DllImport("kernel32"/span>, SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)/span>]
internal static extern IntPtr CreateToolhelp32Snapshot([In] SnapshotFlags dwFlags, [In] IntPtr th32ProcessID)。
IntPtr Handle = CreateToolhelp32Snapshot(SnapshotFlags.All, ProcessHandle);
Console.WriteLine("ProcessHandle = {0}", ProcessHandle.ToString("X")) 。
uint flags = 0;
bool result = GetHandleInformation(ProcessHandle, outflags);
Console.WriteLine("Last error = {0} and handle is valid = {1}", WinErrors.GetLastWin32Error(), result) 。
Console.WriteLine((int)handle)。
uj5u.com熱心網友回復:
一個行程HANDLE和一個行程ID不是一回事。它們是不能互換的。
CreateToolhelp32Snapshot()需要一個行程ID。而這個引數是一個DWORD,所以你應該使用(u)int(又名(U)Int32),而不是IntPtr。
GetHandleInformation()需要一個行程HANDLE。
由于你向CreateToolhelp32Snapshot()傳遞了錯誤的引數值型別,它失敗了,回傳INVALID_HANDLE_VALUE,然后GetLastError()告訴你,沒有找到指定的行程ID。
你可以通過使用OpenProcess()從一個行程ID中獲得一個行程HANDLE。
您可以通過使用GetProcessId()從行程HANDLE中獲得一個行程ID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/320281.html
標籤:
上一篇:把tchar陣列列印成unicode字串rustwinapi
下一篇:注冊表查詢資訊給出不正確的值
