@msdn=https://msdn.microsoft.com/en-us/library/bb432383%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 @pinvoke=http://pinvoke.net/$$$.htm Summary: Retrieves various kinds of object information. !!!!C# Signature: [DllImport("ntdll.dll")] public static extern NtStatus NtQueryObject(IntPtr objectHandle, OBJECT_INFORMATION_CLASS informationClass, IntPtr informationPtr, uint informationLength, ref uint returnLength); !!!!VB Signature: Declare Function NtQueryObject Lib "ntdll.dll" (TODO) As TODO !!!!User-Defined Types: NtStatus, "OBJECT_INFORMATION_CLASS":http://www.pinvoke.net/default.aspx/Enums/OBJECT_INFORMATION_CLASS.html !!!!Alternative Managed API: Do you know one? Please contribute it! !!!!Notes: None. !!!!Tips & Tricks: Please add some! !!!!Sample Code: //helper method with "dynamic" buffer allocation public static IntPtr NtQueryObject(IntPtr handle, OBJECT_INFORMATION_CLASS infoClass, uint infoLength = 0) { if (infoLength == 0) infoLength = (uint)Marshal.SizeOf(typeof(uint)); IntPtr infoPtr = Marshal.AllocHGlobal((int)infoLength); int tries = 0; NtStatus result; while (true) { result = NtQueryObject(handle, infoClass, infoPtr, infoLength, ref infoLength); if (result == NtStatus.InfoLengthMismatch || result == NtStatus.BufferOverflow || result == NtStatus.BufferTooSmall) { Marshal.FreeHGlobal(infoPtr); infoPtr = Marshal.AllocHGlobal((int)infoLength); tries++; continue; } else if (result == NtStatus.Success || tries > 5) break; else { //throw new Exception("Unhandled NtStatus " + result); break; } } if (result == NtStatus.Success) return infoPtr;//don't forget to free the pointer with Marshal.FreeHGlobal after you're done with it else Marshal.FreeHGlobal(infoPtr);//free pointer when not Successful return IntPtr.Zero; } Documentation: NtQueryObject@msdn on MSDN
Edit ntdll.NtQueryObject
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.