Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 开始处理64位进程。。。。。。这甚至在“注意,您可以使用QueryFullProcessImageName函数从32位进程检索32位和64位进程的可执行映像的全名。”实际上,现在GetModuleFileNameEx也可以工作,因为当hModule为NUL_C++_Windows_Process_Pid - Fatal编程技术网

C++ 开始处理64位进程。。。。。。这甚至在“注意,您可以使用QueryFullProcessImageName函数从32位进程检索32位和64位进程的可执行映像的全名。”实际上,现在GetModuleFileNameEx也可以工作,因为当hModule为NUL

C++ 开始处理64位进程。。。。。。这甚至在“注意,您可以使用QueryFullProcessImageName函数从32位进程检索32位和64位进程的可执行映像的全名。”实际上,现在GetModuleFileNameEx也可以工作,因为当hModule为NUL,c++,windows,process,pid,C++,Windows,Process,Pid,开始处理64位进程。。。。。。这甚至在“注意,您可以使用QueryFullProcessImageName函数从32位进程检索32位和64位进程的可执行映像的全名。”实际上,现在GetModuleFileNameEx也可以工作,因为当hModule为NULL时,它使用与QueryFullProcessImageName完全相同的系统调用,但不幸的是,这是未记录的行为。使用WMI-最糟糕的方式,根本不需要另一个(工作)选项,我并没有说这是最好的…是的,但不是最好的。总是问自己-wmi如何做到这一点


开始处理64位进程。。。。。。这甚至在“注意,您可以使用QueryFullProcessImageName函数从32位进程检索32位和64位进程的可执行映像的全名。”实际上,现在
GetModuleFileNameEx
也可以工作,因为当
hModule
NULL
时,它使用与
QueryFullProcessImageName
完全相同的系统调用,但不幸的是,这是未记录的行为。使用WMI-最糟糕的方式,根本不需要另一个(工作)选项,我并没有说这是最好的…是的,但不是最好的。总是问自己-wmi如何做到这一点?为什么不直接用这种方式呢?wmi主要用于其他语言,但不用于c/c++(这是我个人的意见)我同意你的看法。我以为你的意思是答案没有用,我误解了。我只是注意到这不是最佳的方式。但是它当然是正确的。使用WMI-从所有可能的最坏的方式,根本不需要它只是另一个(工作)选项,我还没有声称它是最好的一个…是的,但非常不是最佳的。总是问自己-wmi如何做到这一点?为什么不直接用这种方式呢?wmi主要用于其他语言,但不用于c/c++(这是我个人的意见)我同意你的看法。我以为你的意思是答案没有用,我误解了。我只是注意到这不是最佳的方式。但这当然是正确的。
PS Z:\> Get-WmiObject -Query 'Select ExecutablePath From Win32_Process Where ProcessId = 6056'


__GENUS          : 2
__CLASS          : Win32_Process
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :
ExecutablePath   : C:\Program Files (x86)\Moo0\AlwaysOnTop 1.24\WindowMenuPlus64.exe
PSComputerName   :
$pinvoke = Add-Type -PassThru -Name pinvoke -MemberDefinition @'
    [DllImport("kernel32.dll", SetLastError=true)]
    private static extern bool CloseHandle(
        IntPtr hObject);

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr OpenProcess(
        uint processAccess,
        bool bInheritHandle,
        int processId);

    [DllImport("kernel32.dll", SetLastError=true)]
    private static extern bool QueryFullProcessImageName(
        IntPtr hProcess,
        int dwFlags,
        System.Text.StringBuilder lpExeName,
        ref int lpdwSize);
    private const int QueryLimitedInformation = 0x00001000;

    public static string GetProcessPath(int pid)
    {
        var size = 1024;
        var sb = new System.Text.StringBuilder(size);
        var handle = OpenProcess(QueryLimitedInformation, false, pid);
        if (handle == IntPtr.Zero) return null;
        var success = QueryFullProcessImageName(handle, 0, sb, ref size);
        CloseHandle(handle);
        if (!success) return null;
        return sb.ToString();
    }
'@
$pinvoke::GetProcessPath($pid)