IopBuildGlobalSymbolicLinkString
NTSTATUS __stdcall IopBuildGlobalSymbolicLinkString(_UNICODE_STRING *SymbolicLink, _UNICODE_STRING *GlobalString){
wchar_t *PoolWithTag;
NTSTATUS DeviceInterfaceSymbolicLinkName;
__int64 v6;
_UNICODE_STRING *v7;
__int64 v9;
unsigned int v10;
WCHAR *OutString;
PoolWithTag = 0i64;
OutString = 0i64;
DeviceInterfaceSymbolicLinkName = PnpUnicodeStringToWstr(&OutString, 0i64, SymbolicLink);
if( DeviceInterfaceSymbolicLinkName < 0 )
goto LABEL_9;
v10 = 512;
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, 0x400ui64, 0x20207050ui64);
if( !PoolWithTag )
goto LABEL_15;
DeviceInterfaceSymbolicLinkName = CmGetDeviceInterfaceSymbolicLinkName(v6, OutString, PoolWithTag, 0x200u, &v10);
if( DeviceInterfaceSymbolicLinkName != -1073741789 )
goto LABEL_4;
ExFreePoolWithTag(PoolWithTag, 0);
PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, 2i64 * v10, 0x20207050ui64);
if( !PoolWithTag )
{
LABEL_15:
DeviceInterfaceSymbolicLinkName = -1073741670;
goto LABEL_9;
}
DeviceInterfaceSymbolicLinkName = CmGetDeviceInterfaceSymbolicLinkName(v9, OutString, PoolWithTag, v10, &v10);
LABEL_4:
if( DeviceInterfaceSymbolicLinkName < 0 )
{
if( DeviceInterfaceSymbolicLinkName == -1073741773 )
DeviceInterfaceSymbolicLinkName = -1073741811;
}
else if( 2 * v10 + 20 > 0xFFFF )
{
DeviceInterfaceSymbolicLinkName = -1073741675;
}
else
{
DeviceInterfaceSymbolicLinkName = IopAllocateUnicodeString(GlobalString, 2 * v10 + 20);
if( DeviceInterfaceSymbolicLinkName < 0 )
goto LABEL_9;
DeviceInterfaceSymbolicLinkName = RtlAppendUnicodeToString(GlobalString, (PWCHAR)L"\\GLOBAL??\\");
v7 = GlobalString;
if( DeviceInterfaceSymbolicLinkName >= 0 )
{
DeviceInterfaceSymbolicLinkName = RtlAppendUnicodeToString(GlobalString, PoolWithTag);
if( DeviceInterfaceSymbolicLinkName >= 0 )
goto LABEL_9;
v7 = GlobalString;
}
RtlFreeAnsiString(v7);
}
LABEL_9:
PnpUnicodeStringToWstrFree(OutString, SymbolicLink);
if( PoolWithTag )
ExFreePoolWithTag(PoolWithTag, 0);
return DeviceInterfaceSymbolicLinkName;
}Referenced by:
IopProcessSetInterfaceState