SmKmStoreFileWriteHeader
NTSTATUS __stdcall SmKmStoreFileWriteHeader(
_SMKM_FILE_INFO *FileInfo,
UINT64 PerformsFileIo,
_SMC_CACHE_PARAMETERS *CacheParams,
UINT64 StoreCount){
int v5;
_MDL *v6;
char v7;
char v8;
_PRIVILEGE_SET *v9;
INT16 v10;
_PRIVILEGE_SET *Buffer;
signed int Status;
_MDL *Mdl;
VOID *v14;
NTSTATUS v15;
INT64 *v16;
_IO_STATUS_BLOCK IoStatusBlock;
_LARGE_INTEGER StartingOffset;
INT64 v20[3];
__int128 FileInformation;
__int64 v22;
StartingOffset.QuadPart = 0i64;
v22 = 0i64;
IoStatusBlock = 0i64;
v5 = PerformsFileIo;
v6 = 0i64;
FileInformation = 0i64;
IoSetThreadHardErrorMode(0);
v8 = v7;
LODWORD(v9) = SSHSupportAllocateNonPaged(0x10000, 0x68466D73u);
Buffer = v9;
if( !v9 )
{
Status = -1073741670;
goto LABEL_19;
}
if( !v5 )
{
Mdl = MmCreateMdl(0i64, v9, 0x10000ui64);
v6 = Mdl;
if( !Mdl )
{
Status = -1073741670;
goto LABEL_17;
}
MmBuildMdlForNonPagedPool(Mdl);
MmMdlPageContentsState(v6, MmMdlPageContentsInvariant);
}
memset(Buffer, 0i64, 0x10000u);
Buffer->PrivilegeCount = 1164135783;
Buffer->Control = 3;
Buffer[2].PrivilegeCount = 1;
Buffer->Privilege[0].Luid.LowPart = RtlComputeCrc32(0i64, (UINT8 *)Buffer, 0x30ui64);
v14 = *(VOID **)FileInfo;
if( v5 )
{
v15 = ZwWriteFile((_HANDLE)v14, 0, 0i64, 0i64, &IoStatusBlock, Buffer, 0x10000u, &StartingOffset, 0i64);
v16 = (INT64 *)(*((_QWORD *)FileInfo + 1) + 152i64);
}
else
{
Status = ZwQueryInformationFile(v14, &IoStatusBlock, &FileInformation, 0x18ui64, FileStandardInformation);
if( Status == 259 )
{
KeWaitForSingleObject(*((_QWORD *)FileInfo + 1) + 152i64, 0, 0, 0, 0i64);
Status = IoStatusBlock.Status;
}
if( Status < 0 )
goto LABEL_17;
KeInitializeEvent((INT64)v20, 0, 0);
v15 = IoSynchronousPageWrite(*((_FILE_OBJECT **)FileInfo + 1), v6, &StartingOffset, (_KEVENT *)v20, &IoStatusBlock);
v16 = v20;
}
Status = v15;
if( v15 == 259 )
{
KeWaitForSingleObject((UINT64)v16, 0, 0, 0, 0i64);
Status = IoStatusBlock.Status;
}
if( Status >= 0 )
Status = IoStatusBlock.Information != 0x10000 ? 0xC000016A : 0;
LABEL_17:
CmSiFreeMemory(Buffer);
if( v6 )
ExFreePoolWithTag(v6, 0);
LABEL_19:
LOBYTE(v10) = v8;
IoSetThreadHardErrorMode(v10);
return Status;
}Referenced by:
SmKmStoreFileCreate