/// <summary>Retrieves the specified system information.</summary>
/// <param name="InfoClass">indicate the kind of system information to be retrieved</param>
/// <param name="Info">a buffer that receives the requested information</param>
/// <param name="Size">The allocation size of the buffer pointed to by Info</param>
/// <param name="Length">If null, ignored. Otherwise tells you the size of the information returned by the kernel.</param>
/// <returns>Status Information</returns>
/// http://msdn.microsoft.com/en-us/library/windows/desktop/ms724509%28v=vs.85%29.aspx
[DllImport("ntdll.dll", SetLastError = false)]
public static extern NtStatus NtQuerySystemInformation(SYSTEM_INFORMATION_CLASS InfoClass, IntPtr Info, UInt32 Size, out UInt32 Length);
NtQuerySystemInformation!!!!VB Signature:
Declare Function NtQuerySystemInformation Lib "ntdll.dll" (TODO) As TODO
Do you know one? Please contribute it!
None.
Please add some!
public void Test()
{
UInt32
result = 0;
NativeMethods.SYSTEM_MEMORY_LIST_INFORMATION
MemoryList;
UInt32
returnSize;
Int32[]
arr = new Int32[] { (Int32)Commands.MEMORYLIST };
IntPtr
buff = Marshal.AllocHGlobal(1024); // should be more than adequate
try
{
result = (UInt32)NativeMethods.NtQuerySystemInformation(NativeMethods.SYSTEM_INFORMATION_CLASS.SystemMemoryListInformation, buff, result, out returnSize);
if (result != 0)
// Most likely error is InfoLengthMismatch = 0xc0000004 -- meaning you need to make the buffer larger
throw new System.ComponentModel.Win32Exception(((NativeMethods.NtStatus)result).ToString());
if (NativeMethods.SYSTEM_MEMORY_LIST_INFORMATION_SIZE == 0)
NativeMethods.SYSTEM_MEMORY_LIST_INFORMATION_SIZE = returnSize;
MemoryList = (NativeMethods.SYSTEM_MEMORY_LIST_INFORMATION)Marshal.PtrToStructure(buff, typeof(NativeMethods.SYSTEM_MEMORY_LIST_INFORMATION));
}
finally
{
Marshal.FreeHGlobal(buff);
}
}