Программирование драйверов Windows




Работа с Системным Реестром через вызовы ZwXxx - часть 3


// Выделение области в страничной памяти. // Область будет помечена тегом 'EXaM' pInformation = (KEY_VALUE_PARTIAL_INFORMATION*) ExAllocatePoolWithTag(PagedPool, uInformationSize,'EXaM');

if( pInformation == NULL ) // Не выделена память { ZwClose(KeyHandle); return 0; }

// Получить описание типа KeyValuePartialInformation: // status = ZwQueryValueKey(KeyHandle, &UnicodeValueName, KeyValuePartialInformation, pInformation, uInformationSize, &uInformationSize );

if( !NT_SUCCESS(status) ) { #if DBG DbgPrint("=Example= ZwQueryValueKey not successful."); #endif } else { if( pInformation-&#62Type == REG_DWORD && pInformation-&#62DataLength == sizeof(ULONG) ) { RtlCopyMemory(pValue, pInformation-&#62Data, sizeof(ULONG)); ReturnValue = 1; } }

// Завершение работы ExFreePool(Information); ZwClose(KeyHandle);

return ReturnValue; }

Практически все функции для работы с Системным Реестром должны вызываться из кода, работающего на уровне IRQL равном PASSIVE_LEVEL




Содержание  Назад  Вперед