GetSystemInfo всегда возвращает 0 для dwAllocationGranularity на Win7 из Win Service - PullRequest
1 голос
/ 23 сентября 2011

Я пытаюсь получить размер гранулярности выделения с помощью GetSystemInfo () из приложения-службы Windows C # 3.5 в Windows 7. Однако структура SYSTEM_INFO всегда имеет 0 в dwAllocationGranularity, когда она возвращается из вызова (другие поля заполнены даннымикак и ожидалось)

Структура SYSTEM_INFO выглядит следующим образом, перечисления PROCESSOR_ARCHITECTURE и PROCESSOR_TYPE опущены для краткости:

public struct SYSTEM_INFO
{
    public PROCESSOR_ARCHITECTURE wProcessorArchitecture;
    public ushort wReserved;
    public uint dwPageSize;
    public int lpMinimumApplicationAddress;
    public int lpMaximumApplicationAddress;
    public uint dwActiveProcessorMask;
    public uint dwNumberOfProcessors;
    public PROCESSOR_TYPE dwProcessorType;
    public uint dwAllocationGranularity;
    public ushort wProcessorLevel;
    public ushort wProcessorRevision;
}

Внешний вызов GetSystemInfo таков:

[DllImport("kernel32")]
public static extern void GetSystemInfo(ref SYSTEM_INFO SystemInfo); 

Код вызова выглядит следующим образом:

SYSTEM_INFO sysInfo = new SYSTEM_INFO();
GetSystemInfo(ref sysInfo);

Структура вывода SYS_INFO после выполнения кода:

dwActiveProcessorMask        4294901759
dwAllocationGranularity      0
dwNumberOfProcessors         2047
dwPageSize                   4096
dwProcessorType              15
lpMaximumApplicationAddress  0
lpMinimumApplicationAddress  65536
wProcessorArchitecture       9
wProcessorLevel              4
wProcessorRevision           0
wReserved                    0

Любые идеи, которые мне не хватает, или предложения о других способах получения этогоИнформация (я не хочу, чтобы жесткий код для JIC 64 КБ, он изменен в какой-то момент)?Спасибо.

1 Ответ

7 голосов
/ 23 сентября 2011

У вас также нет 2047 процессоров :) Объявление неверно, оно не будет работать в 64-битном режиме.lpMin / MaxApplicationAddress и dwActiveProcessorMask имеют значение IntPtr.

...