IopGetFileVolumeNameInformation

NTSTATUS __stdcall IopGetFileVolumeNameInformation(
        DEVICE_OBJECT *DeviceObject,
        IO_STATUS_BLOCK *IoStatusBlock,
        FILE_VOLUME_NAME_INFORMATION *Buffer,
        UINT64 a4){
  unsigned int v6; 
  NTSTATUS result; 
  unsigned int Length; 
  int v9; 
  int ReturnLength[4]; 
  struct _OBJECT_NAME_INFORMATION ObjectNameInfo; 
  ReturnLength[0] = 0;
  v6 = a4 - 4;
  result = ObQueryNameString(DeviceObject, &ObjectNameInfo, 0x200ui64, (UINT64 *)ReturnLength);
  if( result < 0 )
  {
    IoStatusBlock->Status = result;
    IoStatusBlock->Information = 0i64;
  }
  else
  {
    Length = ObjectNameInfo.Name.Length;
    if( v6 < ObjectNameInfo.Name.Length )
      Length = v6 & 0xFFFFFFFE;
    v9 = v6 < ObjectNameInfo.Name.Length ? 0x80000005 : 0;
    Buffer->DeviceNameLength = ObjectNameInfo.Name.Length;
    memmove((UINT8 *)Buffer->DeviceName, (UINT8 *)ObjectNameInfo.Name.Buffer, Length);
    IoStatusBlock->Status = v9;
    IoStatusBlock->Information = Length + 4;
    return v9;
  }
  return result;
}

Referenced by:

NtQueryInformationFile