SiGetSystemDeviceName

NTSTATUS __stdcall SiGetSystemDeviceName(
        INT64 *QueryRoutine,
        _FIRMWARE_TYPE a2,
        WCHAR **a3,
        WCHAR *String,
        INT64 Size,
        UINT64 *BytesWritten,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  size_t v11; 
  VOID *v12; 
  unsigned int v14; 
  int v15; 
  NTSTATUS v16; 
  __int64 v17; 
  size_t v18; 
  VOID *Src; 
  size_t v21; 
  WCHAR *v22; 
  __int128 v23; 
  __int128 v24; 

  v11 = (unsigned int)a3;
  v12 = *(VOID **)&a2;
  v22 = String;
  *(_DWORD *)String = 0;
  Src = 0i64;
  v23 = 0i64;
  v24 = 0i64;
  v14 = 1;
  ZwQuerySystemInformation();
  if( v15 >= 0 )
  {
    v14 = 0;
    if( (int)v24 < 3 )
      v14 = v24;
  }
  v16 = ((__int64(__fastcall *)(_QWORD, VOID **))QueryRoutine)(v14, &Src);
  if( v16 >= 0 )
  {
    v17 = -1i64;
    do
      ++v17;
    while( *((_WORD *)Src + v17) );
    v18 = 2 * v17 + 2;
    v21 = v18;
    if( v12 && v11 >= v18 )
    {
      v16 = 0;
      memmove(v12, Src, v18);
    }
    else
    {
      v16 = -1073741789;
    }
    *(_DWORD *)String = v18;
  }
  if( Src )
    ExFreePoolWithTag(Src, 0);
  return v16;
}

Referenced by:

No references.