On 11/13/12, Corinna Vinschen <vinsc...@redhat.com> wrote: > On Nov 13 16:32, Ozkan Sezer wrote: >> On Mon, Nov 12, 2012 at 7:37 PM, Corinna Vinschen <vinsc...@redhat.com> >> wrote: >> >> About the correction made in SYSTEM_BASIC_INFORMATION: >> >> [...] >> > Index: winternl.h >> > =================================================================== >> > --- winternl.h (revision 5451) >> > +++ winternl.h (working copy) >> > @@ -688,9 +688,9 @@ >> > ULONG LowestPhysicalPage; >> > ULONG HighestPhysicalPage; >> > ULONG AllocationGranularity; >> > - ULONG LowestUserAddress; >> > - ULONG HighestUserAddress; >> > - ULONG ActiveProcessors; >> > + ULONG_PTR LowestUserAddress; >> > + ULONG_PTR HighestUserAddress; >> > + ULONG_PTR ActiveProcessors; >> > CCHAR NumberOfProcessors; >> > } SYSTEM_BASIC_INFORMATION,*PSYSTEM_BASIC_INFORMATION; >> >> If we compare original structure, we have: >> >> BYTE Reserved1[24]; >> PVOID Reserved2[4]; >> CCHAR NumberOfProcessors; >> >> So, PVOID Reserved2[4] should correspond to 4 ULONG_PTR members >> in the detailed version: do we not need the following, too? >> >> - ULONG AllocationGranularity; >> + ULONG_PTR AllocationGranularity; > > No, the AllocationGranularity is a ULONG value. The size of the > structure is a result of the automatic 8 byte alignment of 8 byte types. > Try this: > > === SNIP === > #include <stdio.h> > #include <string.h> > #include <windows.h> > > #ifndef NT_SUCCESS > #define NT_SUCCESS(status) ((NTSTATUS) (status) >= 0) > #endif > > typedef int NTSTATUS; > > typedef struct _SYSTEM_BASIC_INFORMATION > { > ULONG Unknown; > ULONG MaximumIncrement; > ULONG PhysicalPageSize; > ULONG NumberOfPhysicalPages; > ULONG LowestPhysicalPage; > ULONG HighestPhysicalPage; > ULONG AllocationGranularity; > #ifdef _WIN64 > ULONG dummy1; > #endif > ULONG_PTR LowestUserAddress; > ULONG_PTR HighestUserAddress; > ULONG_PTR ActiveProcessors; > UCHAR NumberProcessors; > } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; > > NTSTATUS NTAPI NtQuerySystemInformation (ULONG, PVOID, ULONG, PULONG); > > int > main () > { > NTSTATUS status; > ULONG i, size; > SYSTEM_BASIC_INFORMATION sbi; > > memset (&sbi, 0xbf, sizeof sbi); > status = NtQuerySystemInformation (0, &sbi, sizeof sbi, &size); > if (!NT_SUCCESS (status)) > { > fprintf (stderr, "NtQuerySystemInformation: 0x%lx\n", status); > return 1; > } > printf ("Size: %lu\n", size); > printf ("AllocationGranularity: %lu\n", sbi.AllocationGranularity); > #ifdef _WIN64 > printf ("dummy1: 0x%lx\n", sbi.dummy1); > #endif > return 0; > } > === SNAP === > > $ x86_64-w64-mingw32-gcc -g -o sbi sbi.c -lntdll > $ ./sbi > Size: 64 > AllocationGranularity: 65536 > dummy1: 0xbfbfbfbf >
I see. Thanks. > > Corinna > -- O.S. ------------------------------------------------------------------------------ Monitor your physical, virtual and cloud infrastructure from a single web console. Get in-depth insight into apps, servers, databases, vmware, SAP, cloud infrastructure, etc. Download 30-day Free Trial. Pricing starts from $795 for 25 servers or applications! http://p.sf.net/sfu/zoho_dev2dev_nov _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public