KeyInformation
パラメータを に渡す方法を知りたいですNtEnumerateKey()
。次のコードを実行すると、 「無効なパラメーターがサービスまたは関数に渡されました」というエラー メッセージNtEnumerateKey()
が返されます。NTSTATUS = 0xC000000D
Windows 7 を使用しています。以下のコードは Delphi 言語を使用していますが、C 言語でも質問に答えることができます。私の質問は、プログラミング言語に固有のものではありません。
type
KEY_NAME_INFORMATION = record
NameLength: ULONG;
Name: array[0..254] of WCHAR;
end;
PKEY_NAME_INFORMATION = ^KEY_NAME_INFORMATION;
var
iNtStatus: LONG;
hKeyResult: THandle;
KeyNameInfo: KEY_NAME_INFORMATION;
iResultLen: ULONG;
iNtStatus := NtOpenKey(@hKeyResult, (KEY_ENUMERATE_SUB_KEYS) and not
SYNCHRONIZE, @rObjAttrs);
if hKeyResult = 0 then Exit;
iNtStatus := NtEnumerateKey(hKeyResult,
0,
KeyNameInformation,
@KeyNameInfo, // I'm asking about this parameter,
SizeOf(KEY_NAME_INFORMATION), // and also this parameter
@iResultLen);
更新: 奇妙なこと
KeyBasicInformation
の代わりに渡すとKeyNameInformation
、NtEnumerateKey()
が返されますSTATUS_SUCCESS
。NtEnumerateKey()
をサポートしていませんKeyNameInformation
か?
type
KEY_BASIC_INFORMATION = record
LastWriteTime: LARGE_INTEGER;
TitleIndex: ULONG;
NameLength: ULONG;
Name: array[0..254] of WCHAR;
end;
PKEY_BASIC_INFORMATION = ^KEY_BASIC_INFORMATION;
var
KeyBasicInfo: KEY_BASIC_INFORMATION;
iNtStatus := NtEnumerateKey(hKeyResult,
0,
KeyBasicInformation, // Note this!
@KeyBasicInfo, // Note this!
SizeOf(KEY_BASIC_INFORMATION), // Note this!
@iResultLen);