Используя WMI, как я могу определить, является ли удаленный процесс 32-разрядным или 64-разрядным? - PullRequest
5 голосов
/ 03 марта 2011

У меня есть коллекция объектов win32_process, запрошенных с удаленного компьютера с помощью WMI. Как определить, является ли каждый процесс 32-разрядным или 64-разрядным?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

WMI не имеет этой функции.Решение состоит в том, чтобы проверить каждый процесс Handle, используя IsWow64Process через P / Invoke. Этот код должен помочь вам понять идею.

0 голосов
/ 10 декабря 2011

Попробуйте это:

/// <summary>
/// Retrieves the platform information from the process architecture.
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string GetPlatform(string path)
{
    string result = "";
    try
    {
        const int pePointerOffset = 60;
        const int machineOffset = 4;
        var data = new byte[4096];
        using (Stream s = new FileStream(path, FileMode.Open, FileAccess.Read))
        {
            s.Read(data, 0, 4096);
        }
        // Dos header is 64 bytes, last element, long (4 bytes) is the address of 
        // the PE header
        int peHeaderAddr = BitConverter.ToInt32(data, pePointerOffset);
        int machineUint = BitConverter.ToUInt16(data, peHeaderAddr +
                                                      machineOffset);
        result = ((MachineType) machineUint).ToString();
    }
    catch { }

    return result;
}



public enum MachineType
{
    Native = 0,
    X86 = 0x014c,
    Amd64 = 0x0200,
    X64 = 0x8664
}
...