KsepDbQueryRegistryDeviceData
NTSTATUS __stdcall KsepDbQueryRegistryDeviceData(
PWCHAR DeviceId,
PWCHAR DataName,
UINT64 *DataType,
UINT64 *DataBufferLength,
PVOID DataBuffer){
NTSTATUS v8;
UINT64 ValueBufferLength;
UINT64 ValueType;
HANDLE Handle;
UINT64 ActualLength;
UNICODE_STRING TargetString;
*(_QWORD *)&TargetString.Length = 0i64;
TargetString.Buffer = 0i64;
Handle = 0i64;
v8 = KsepStringTransform(&TargetString, DeviceId);
if( v8 >= 0 )
{
if( KsepRegistryOpenKey(
(PWCHAR)L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Compatibility\\Device",
TargetString.Buffer,
&Handle) < 0
|| (ValueBufferLength = *(unsigned int *)DataBufferLength,
LODWORD(ValueType) = 0,
ActualLength = ValueBufferLength,
v8 = KsepRegistryQueryValue(Handle, DataName, &ValueType, DataBuffer, ValueBufferLength, &ActualLength),
*(_DWORD *)DataBufferLength = ActualLength,
v8 == -1073741772) )
{
v8 = -1073741275;
}
else if( v8 >= 0 )
{
v8 = 0;
*(_DWORD *)DataType |= ValueType | 0x10000000;
}
if( Handle )
{
ZwClose(Handle);
_InterlockedIncrement(&dword_140C2A7FC);
}
}
KsepStringFree(&TargetString);
return v8;
}Referenced by:
KseQueryDeviceData