WmipTranslatePDOInstanceNames
VOID __stdcall WmipTranslatePDOInstanceNames(_IRP *Irp, UINT8 MinorFunction, UINT64 MaxBufferSize, _REGENTRY *RegEntry){
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v4;
unsigned int v5;
int v6;
int v7;
unsigned int v8;
_ADAPTER_OBJECT *v9;
_ADAPTER_OBJECT *v10;
_WORD *v11;
union {_IRP *MasterIrp;int IrpCount;void *SystemBuffer;} v12;
unsigned int v13;
unsigned int v14;
__int64 v15;
unsigned int v16;
__int64 v17;
char *v18;
char *v19;
int v20;
__int64 v21;
__int64 v22;
_DWORD *v23;
unsigned int v24;
unsigned int v25;
wchar_t *v26;
char *v27;
wchar_t *v28;
unsigned __int64 v29;
__int64 v30;
_IRP *v31;
_ADAPTER_OBJECT *v32;
size_t Length;
unsigned int v34;
wchar_t *Buffer;
__int64 v36;
char v37;
char v38;
int v39;
_REGENTRY v40;
unsigned int v41;
_UNICODE_STRING *MasterIrp;
_UNICODE_STRING InstanceName;
_ADAPTER_OBJECT *v44;
int v47;
v47 = MaxBufferSize;
v4.MasterIrp = (_IRP *)Irp->AssociatedIrp;
v5 = 0;
v6 = 0;
v7 = LODWORD(Irp->IoStatus.Information) + 1;
v37 = 0;
MasterIrp = (_UNICODE_STRING *)v4.MasterIrp;
InstanceName = 0i64;
v39 = 0;
v8 = v7 & 0xFFFFFFFE;
v38 = 1;
v9 = 0i64;
v10 = 0i64;
v11 = 0i64;
v12.MasterIrp = v4.MasterIrp;
v13 = 0;
v40 = 0;
do
{
v14 = 0;
v41 = 0;
if( v12.MasterIrp->Flags )
{
v15 = 0i64;
v44 = 0i64;
while( 1 )
{
v16 = v13;
v17 = 32i64 * v14;
v18 = *(char **)((char *)&v12.MasterIrp->AssociatedIrp.MasterIrp + v17) - WmipDataProviderPnpidGuid;
if( !v18 )
v18 = *(char **)((char *)&v12.MasterIrp->ThreadListEntry.Flink + v17)
- *((_QWORD *)&WmipDataProviderPnpidGuid + 1);
if( !v18 )
goto LABEL_46;
v19 = *(char **)((char *)&v12.MasterIrp->AssociatedIrp.MasterIrp + v17) - WmipDataProviderPnPIdInstanceNamesGuid;
if( !v19 )
v19 = *(char **)((char *)&v12.MasterIrp->ThreadListEntry.Flink + v17)
- *((_QWORD *)&WmipDataProviderPnPIdInstanceNamesGuid + 1);
if( !v19 )
{
LABEL_46:
v38 = 0;
if( v10 )
{
HalPutDmaAdapter(v10);
v4.MasterIrp = (_IRP *)MasterIrp;
v10 = 0i64;
v6 = v39;
v16 = v13;
v15 = (__int64)v44;
}
}
v20 = *(_DWORD *)((char *)&v12.MasterIrp->ThreadListEntry.Blink + v17);
if( (v20 & 0x20) == 0 )
goto LABEL_11;
if( !v11 )
{
v30 = *(unsigned int *)&v4.MasterIrp->AllocationProcessorNumber;
v31 = v4.MasterIrp;
while( (_DWORD)v30 )
{
v31 = (_IRP *)((char *)v31 + v30);
v30 = *(unsigned int *)&v31->AllocationProcessorNumber;
}
v11 = (__int16 *)((char *)&v31->Type + ((*(_DWORD *)&v31->Type + 1) & 0xFFFFFFFE));
v5 = v47 + v4.IrpCount - (_DWORD)v11;
}
v13 = HIDWORD((&v12.MasterIrp->ThreadListEntry.Blink)[(unsigned __int64)v17 / 8]);
v9 = *(_ADAPTER_OBJECT **)((char *)&v12.MasterIrp->IoStatus.Pointer + v17);
if( v16 >= v13 )
v13 = v16;
v40 = v13;
if( v9 == (_ADAPTER_OBJECT *)v15 )
{
*(int *)((char *)&v12.MasterIrp->IoStatus.Status + v17) = v6;
*(_DWORD *)((char *)&v12.MasterIrp->ThreadListEntry.Blink + v17) = v20 | 8;
goto LABEL_30;
}
if( IoGetDeviceInstanceName(v9, &InstanceName, (_UNICODE_STRING *)v4.MasterIrp) >= 0 )
break;
LABEL_30:
if( MinorFunction == 11 )
{
HalPutDmaAdapter(v9);
v40 = v13;
}
LABEL_11:
v4.MasterIrp = (_IRP *)MasterIrp;
v14 = v41 + 1;
v6 = v39;
v15 = (__int64)v44;
v41 = v14;
if( v14 >= v12.MasterIrp->Flags )
goto LABEL_12;
}
if( v38 )
{
if( !v10 )
{
ObfReferenceObject(v9);
LABEL_39:
v32 = v9;
if( v10 )
v32 = v10;
v10 = v32;
LABEL_42:
Length = InstanceName.Length;
v34 = InstanceName.Length + 4;
v8 += v34;
if( v37 || v34 > v5 )
{
v37 = 1;
}
else
{
*(_DWORD *)((char *)&v12.MasterIrp->ThreadListEntry.Blink + v17) |= 8u;
Buffer = InstanceName.Buffer;
*(int *)((char *)&v12.MasterIrp->IoStatus.Status + v17) = (_DWORD)v11 - v12.IrpCount;
v39 = (_DWORD)v11 - v12.IrpCount;
v36 = Length;
v44 = v9;
*v11 = Length + 2;
memmove(v11 + 1, Buffer, Length);
*(_WORD *)((char *)v11 + v36 + 2) = 95;
v11 = (_WORD *)((char *)v11 + v36 + 4);
v5 -= v34;
}
RtlFreeAnsiString(&InstanceName);
v13 = v40;
goto LABEL_30;
}
if( v10 == v9 )
goto LABEL_39;
}
v38 = 0;
if( v10 )
{
HalPutDmaAdapter(v10);
v10 = 0i64;
}
goto LABEL_42;
}
LABEL_12:
v21 = *(unsigned int *)&v12.MasterIrp->AllocationProcessorNumber;
v12.MasterIrp = (_IRP *)((char *)v12.MasterIrp + v21);
}
while( (_DWORD)v21 );
if( v38 && v10 )
{
if( IoGetDeviceInstanceName(v9, &InstanceName, (_UNICODE_STRING *)v4.MasterIrp) >= 0 )
{
v22 = InstanceName.Length;
v23 = (_DWORD *)(((unsigned __int64)v11 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
v24 = (((_DWORD)v11 + 7) & 0xFFFFFFF8) - (_DWORD)v11;
v25 = 2 * InstanceName.Length + 96;
v8 += v24 + v25;
if( v37 || v25 > v5 - v24 )
{
v37 = 1;
}
else if( !*((_QWORD *)RegEntry + 3) )
{
ObfReferenceObject(v10);
*((_QWORD *)RegEntry + 3) = v10;
RegEntry[13] = v40;
*(_DWORD *)&v12.MasterIrp->AllocationProcessorNumber = (_DWORD)v23 - v12.IrpCount;
memset(v23, 0i64, 0x58u);
v26 = InstanceName.Buffer;
v23[4] = 2;
*v23 = v25;
v23[10] = 40;
v27 = (char *)v23 + 90;
v23[11] = v40;
v23[12] = 88;
*(_OWORD *)(v23 + 6) = WmipDataProviderPnpidGuid;
*((_WORD *)v23 + 44) = v22 + 2;
memmove((char *)v23 + 90, v26, v22);
v28 = InstanceName.Buffer;
*(_WORD *)&v27[v22] = 95;
v23[18] = 4;
v23[19] = 1;
v23[20] = v22 + 92;
*(_OWORD *)(v23 + 14) = WmipDataProviderPnPIdInstanceNamesGuid;
*(_WORD *)&v27[v22 + 2] = v22;
memmove((char *)v23 + v22 + 94, v28, v22);
}
RtlFreeAnsiString(&InstanceName);
}
HalPutDmaAdapter(v10);
}
*(_DWORD *)&MasterIrp->Length = v8;
v29 = 4i64;
if( !v37 )
v29 = v8;
Irp->IoStatus.Information = v29;
}Referenced by:
WmipForwardWmiIrp