CmpGetRegistryValue
NTSTATUS __stdcall CmpGetRegistryValue(PVOID KeyHandle, PWCHAR ValueName, _KEY_VALUE_PARTIAL_INFORMATION **Information){
NTSTATUS result;
VOID **PoolWithTag;
_KEY_VALUE_PARTIAL_INFORMATION *v7;
int v8;
UINT64 Length;
UINT64 Lengtha;
_UNICODE_STRING ValueNamea;
UINT64 NumberOfBytes;
LODWORD(NumberOfBytes) = 0;
ValueNamea = 0i64;
RtlInitUnicodeString(&ValueNamea, ValueName);
LODWORD(Length) = 0;
result = ZwQueryValueKey(KeyHandle, &ValueNamea, KeyValuePartialInformation, 0i64, Length, &NumberOfBytes);
if( result >= 0 || result == -2147483643 || result == -1073741789 )
{
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, (unsigned int)NumberOfBytes, 1229996865i64);
v7 = (_KEY_VALUE_PARTIAL_INFORMATION *)PoolWithTag;
if( PoolWithTag )
{
LODWORD(Lengtha) = NumberOfBytes;
v8 = ZwQueryValueKey(KeyHandle, &ValueNamea, KeyValuePartialInformation, PoolWithTag, Lengtha, &NumberOfBytes);
if( v8 >= 0 )
{
*Information = v7;
return 0;
}
else
{
ExFreePoolWithTag(v7, 0);
return v8;
}
}
else
{
return -1073741670;
}
}
return result;
}Referenced by:
CmpSetSystemBiosInformation