Здравствуйте, MShura, Вы писали:
MS>Все нормальные API экспортируют имена в стиле "C", чтобы не было проблем с разными компиляторами.
это было то что нужно. Спасибо
Только теперь у меня видимо лыжи не едут или ...
в итоге код такой
// testZwQueryKey.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
typedef enum _KEY_INFORMATION_CLASS {
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation,
KeyNameInformation
} KEY_INFORMATION_CLASS;
typedef struct _KEY_BASIC_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG NameLength;
WCHAR Name[1]; // Variable length string
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
#define NTSTATUS DWORD
extern "C"{
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryKey(
IN HANDLE KeyHandle,
IN KEY_INFORMATION_CLASS KeyInformationClass,
OUT PVOID KeyInformation,
IN ULONG KeyInformationLength,
OUT PULONG ResultLength
);
}
int main(int argc, char* argv[])
{
HKEY hKey;
RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Far\\Editor", 0, KEY_ALL_ACCESS, &hKey );
if( hKey )
{
ULONG l = 1024;
PKEY_BASIC_INFORMATION kbi = (PKEY_BASIC_INFORMATION)(new char[l]);
memset( kbi, 0, l );
ZwQueryKey( hKey, KeyBasicInformation, kbi, l, &l );
wprintf(L"Basic Info:[%s]\n", kbi->Name);
memset( kbi, 0, l );
ZwQueryKey( hKey, KeyNodeInformation, kbi, l, &l );
wprintf(L"Node Info:[%s]\n", kbi->Name);
memset( kbi, 0, l );
ZwQueryKey( hKey, KeyFullInformation, kbi, l, &l );
wprintf(L"Full Info:[%s]\n", kbi->Name);
memset( kbi, 0, l );
ZwQueryKey( hKey, KeyNameInformation, kbi, l, &l );
wprintf(L"Name Info:[%s]\n", kbi->Name);
RegCloseKey( hKey );
delete [] (char*)kbi;
}
return 0;
}
на выходе получаю такую инфу
Basic Info:[Editor]
Node Info:[]
Full Info:[]
Name Info:[TRY\USER\S-1-5]
что-то никакого полного пути нету. Видимо опять что-то не так делаю.
Просветите
Спасибо