2012-03-06 4 views
0

私のプログラムではNtQueryObject(handle, OBJECT_INFORMATION_CLASS.ObjectTypeInformation, IntPtr.Zero, 0, out length);を使用していますが、これは-8という長さを返します。私はどのようにバッファーサイズが負になることがあります表示されません。NtQueryObject関数は長さを-8として返します

これがなぜ発生するのか、どのように修正するのか誰にも分かりますか?

ありがとうございます!

NB:

私が使用してNtQueryObjectをインポート:

[DllImport("ntdll.dll")] 
internal static extern NT_STATUS NtQueryObject(
[In] IntPtr Handle, 
[In] OBJECT_INFORMATION_CLASS ObjectInformationClass, 
[In] IntPtr ObjectInformation, 
[In] int ObjectInformationLength, 
[Out] out uint ReturnLength); 
+1

機能の結果によると、NTSTATUS - 結果はどうですか? – Yahia

答えて

0

このようにoutrefに変更してください。

[DllImport("ntdll.dll")] 
public static extern int NtQueryObject(IntPtr ObjectHandle, int ObjectInformationClass, IntPtr ObjectInformation, int ObjectInformationLength, ref int returnLength); 

問題は私がどのようにして電話していたかのようでした。

+0

' out'を使うのは正しいです。 –

0

最後のパラメータは、あなたはそれがあなたのコードでは、単にlongどこかのように宣言している必要がありますので、unsigned long型であるために仮定されていること。

+0

いいえ、intとしても機能するunsigned intです。 –

+0

'int'は正しいマーシャリングです –

0

これは、無効なハンドルが発生した場合、通常ハンドルが使用できなくなったネットワークリソースを参照する場合に発生する可能性があります。

NtQueryObject()の戻り状態が期待どおりであることを確認します。

// 
// MessageId: STATUS_INVALID_HANDLE 
// 
// MessageText: 
// 
// An invalid HANDLE was specified. 
// 
#define STATUS_INVALID_HANDLE   ((NTSTATUS)0xC0000008L) // winnt 
関連する問題