IopRetrieveSystemDeviceName

NTSTATUS __stdcall IopRetrieveSystemDeviceName(
        INT64 *QueryRoutine,
        WCHAR *a2,
        UINT64 a3,
        UINT64 *a4,
        VOID *UserBuffer,
        INT64 BufferSize,
        UINT64 *RequiredSize,
        INT64 a8,
        INT64 a9,
        INT64 a10,
        INT64 a11){
  int v14; 
  __int64 v15; 
  unsigned int v16; 
  WCHAR *v17; 
  int v18; 
  NTSTATUS v19; 
  int v20; 
  int v22[14]; 

  v14 = 0;
  v22[0] = 0;
  if( a2 && (unsigned int)a3 > 0x10 )
  {
    if( KeGetCurrentThread()->PreviousMode )
    {
      if( ((unsigned __int8)a2 & 7) != 0 )
        ExRaiseDatatypeMisalignment();
      v15 = 0x7FFFFFFF0000i64;
      if( (unsigned __int64)a2 < 0x7FFFFFFF0000i64 )
        v15 = (__int64)a2;
      *(_BYTE *)v15 = *(_BYTE *)v15;
      *(_BYTE *)(v15 + 15) = *(_BYTE *)(v15 + 15);
    }
    v16 = a3 - 16;
    v17 = a2 + 8;
  }
  else
  {
    v16 = 0;
    v17 = 0i64;
  }
  if( v16 > 0xFFFF )
    v16 = 0xFFFF;
  v18 = ((__int64(__fastcall *)(WCHAR *, _QWORD, int *))QueryRoutine)(v17, v16, v22);
  v19 = v18;
  if( v18 < 0 )
  {
    if( v18 == -1073741789 )
    {
      *(_DWORD *)a4 = v22[0] + 16;
      return v19;
    }
  }
  else
  {
    v20 = v22[0];
    *a2 = LOWORD(v22[0]) - 2;
    a2[1] = v16;
    *((_QWORD *)a2 + 1) = v17;
    if( v19 >= 0 )
      v14 = v20 + 16;
  }
  *(_DWORD *)a4 = v14;
  return v19;
}

Referenced by:

No references.