2011-09-23 7 views
1

Windows 7의 C# 3.5 Windows 서비스 응용 프로그램에서 GetSystemInfo()를 사용하여 할당 세분화 크기를 얻으려고합니다. 그러나 SYSTEM_INFO 구조체는 항상 dwAllocationGranularity에 0을가집니다GetSystemInfo는 Win 서비스에서 Win7의 dwAllocationGranularity에 대해 항상 0을 반환합니다.

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에 통근 콜이있다 : (다른 필드는 데이터가 예상대로 채운)

SYSTEM_INFO 구조체는 간결함을 위해 생략 PROCESSOR_ARCHITECTURE 및 PROCESSOR_TYPE 열거으로 다음과 같다

통화에서 반환

(210)
[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 

어떤 아이디어 이 정보 (64Kb JIC로 하드 코드하지 않으려 고합니다.) 감사.

답변

7

또한 2047 프로세서가 없습니다 :) 선언이 잘못되어 64 비트 모드에서 실패합니다. lpMin/MaxApplicationAddress 및 dwActiveProcessorMask는 IntPtr입니다.

+0

upvoted "당신은 2047 프로세서가 없습니다." : D – hawk

+0

그것은 엄청나게 효과적이고 효율적이었습니다. 하지만 여전히 올바른 대답 이었으므로 어떻게 할 수 있습니까? :) – dannygb

+1

당신은 그것에 대해 웃어 보려고 할 수 있었고, 내려 놓는 대신 웃기는 것이 었습니다. 비추십시오. –

관련 문제