Detsel
Гость
|
|
« : 22-09-2004 13:03 » |
|
Доброго времени суток! Подскажите пожалуйста, что делаю не так! В DriverEntry пытаюсь читать из реестра. Читаю ключ тип которого REG_SZ. Делаю это следующим образом UNICODE_STRING tmpUnicode, ValueName; OBJECT_ATTRIBUTES ObjectAttributes; HANDLE KeyHandle; KEY_VALUE_PARTIAL_INFORMATION *pInformation; ULONG uSize, retSize; char* Data;
....................................................................
RtlInitUnicodeString(&tmpUnicode, L"\\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\DrvFltIp"); RtlInitUnicodeString(&ValueName, L"Setup_Path"); InitializeObjectAttributes(&ObjectAttributes, &tmpUnicode, 0 , NULL, NULL); ntStatus=ZwOpenKey(&KeyHandle, KEY_QUERY_VALUE | KEY_READ,&ObjectAttributes ); if(!NT_SUCCESS(ntStatus)) { if(ntStatus==STATUS_INVALID_HANDLE) dprintf("STATUS_INVALID_HANDLE"); if(ntStatus==STATUS_ACCESS_DENIED) dprintf("STATUS_ACCESS_DENIED"); }
uSize=sizeof(KEY_VALUE_PARTIAL_INFORMATION)+4096; pInformation=ExAllocatePool(PagedPool,sizeof(KEY_VALUE_PARTIAL_INFORMATION)); RtlZeroMemory(pInformation,sizeof(KEY_VALUE_PARTIAL_INFORMATION)); ntStatus=ZwQueryValueKey(KeyHandle, &ValueName,KeyValuePartialInformation, pInformation,uSize,&retSize); if(!NT_SUCCESS(ntStatus)) { if(ntStatus==STATUS_BUFFER_TOO_SMALL) dprintf("STATUS_BUFFER_TOO_SMALL"); if(ntStatus==STATUS_INVALID_PARAMETER) dprintf("STATUS_INVALID_PARAMETER"); if(ntStatus==STATUS_OBJECT_NAME_NOT_FOUND) dprintf("STATUS_OBJECT_NAME_NOT_FOUND"); } ZwClose(KeyHandle); Data=ExAllocatePool(PagedPool,pInformation->DataLength); RtlZeroMemory(Data,pInformation->DataLength); sprintf(Data,pInformation->Data);
dprintf("%s",Data); ExFreePool(pInformation); ExFreePool(Data);
После всего получаю в Data "\" и все! То есть один символ того что пытаюсь прочитать! Скажите пожалуйста что делаю неправильно! Заранее большой Thanks!
|