PiDmInitializeComparisonObject
NTSTATUS __fastcall PiDmInitializeComparisonObject(_WORD *a1, INT64 a2, INT64 a3){
int v3;
wchar_t *Buffer;
NTSTATUS result;
__int64 v6;
_WORD *v7;
unsigned __int16 Length;
unsigned __int16 MaximumLength;
UNICODE_STRING String;
*(_QWORD *)(a3 + 16) = a1;
*(_DWORD *)(a3 + 28) = a2;
v3 = a2;
Buffer = a1;
result = 0;
String = 0i64;
if( !a1 )
goto LABEL_13;
v6 = 0x7FFFi64;
v7 = a1;
do
{
if( !*v7 )
break;
++v7;
--v6;
}
while( v6 );
result = v6 == 0 ? 0xC000000D : 0;
if( v6 )
{
Length = 2 * (v6 != 0 ? 0x7FFF - v6 : 0);
String.Buffer = Buffer;
String.Length = Length;
MaximumLength = Length + 2;
String.MaximumLength = Length + 2;
}
else
{
LABEL_13:
Buffer = String.Buffer;
MaximumLength = String.MaximumLength;
Length = String.Length;
}
if( result >= 0 )
{
if( v3 == 3 )
{
if( Length <= 8u )
return -1073741772;
String.Length = Length - 8;
String.Buffer = Buffer + 4;
String.MaximumLength = MaximumLength - 8;
}
return RtlHashUnicodeString(&String, 1u, 0i64, (UINT64 *)(a3 + 24));
}
return result;
}Referenced by:
PiDmAddCacheReferenceForObject
PiDmLookupObject
PiPnpRtlObjectEventCreate