PiDmInitializeComparisonObject
NTSTATUS __stdcall PiDmInitializeComparisonObject(
WCHAR *ObjectName,
PNP_OBJECT_TYPE ObjectType,
PI_DM_OBJECT *ComparisonObject){
WCHAR *Buffer;
NTSTATUS result;
__int64 v6;
WCHAR *v7;
unsigned __int16 Length;
unsigned __int16 MaximumLength;
_UNICODE_STRING String;
*((_QWORD *)ComparisonObject + 2) = ObjectName;
ComparisonObject[7] = ObjectType;
Buffer = ObjectName;
result = 0;
String = 0i64;
if( !ObjectName )
goto LABEL_13;
v6 = 0x7FFFi64;
v7 = ObjectName;
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( ObjectType == 3 )
{
if( Length <= 8u )
return -1073741772;
String.Length = Length - 8;
String.Buffer = Buffer + 4;
String.MaximumLength = MaximumLength - 8;
}
return RtlHashUnicodeString(&String, 1u, 0i64, (UINT64 *)ComparisonObject + 3);
}
return result;
}Referenced by:
PiDmAddCacheReferenceForObject
PiDmLookupObject
PiPnpRtlObjectEventCreate