RawCreate
NTSTATUS __stdcall RawCreate(PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader, PIRP Irp){
__int64 v2;
_FAST_MUTEX *p_PagingIoResource;
__int64 v5;
_FILE_OBJECT *v7;
int v8;
int v9;
UINT32 v10;
ACCESS_MASK v11;
int v12;
int v13;
p_PagingIoResource = (_FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource;
v5 = v2;
ExAcquireFastMutex((FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource);
v7 = *(_FILE_OBJECT **)(v5 + 48);
if( v7 && (v7->FileName.Length || v7->RelatedFileObject)
|| (v8 = *(_DWORD *)(v5 + 16), (v8 & 0xFF000000) != 0x1000000)
|| (v8 & 1) != 0 )
{
v13 = -1073741811;
goto LABEL_15;
}
v9 = *(_DWORD *)&AdvancedHeader[1].NodeTypeCode;
if( (v9 & 1) != 0 )
{
v13 = -1073741790;
goto LABEL_15;
}
if( (v9 & 2) != 0 )
{
v13 = -1073741202;
goto LABEL_15;
}
v10 = *(unsigned __int16 *)(v5 + 26);
v11 = *(_DWORD *)(*(_QWORD *)(v5 + 8) + 16i64);
if( *(_DWORD *)&AdvancedHeader[1].Flags )
{
v13 = IoCheckLinkShareAccess(v11, v10, v7, (PSHARE_ACCESS)((char *)&AdvancedHeader[1].Resource + 4), 0i64, 1u);
if( v13 >= 0 )
{
v12 = *(_DWORD *)&AdvancedHeader[1].Flags;
if( v12 )
goto LABEL_10;
goto LABEL_9;
}
LABEL_15:
*((_QWORD *)Irp + 7) = 0i64;
goto LABEL_11;
}
LABEL_9:
IoSetLinkShareAccess(
v11,
v10,
*(PFILE_OBJECT *)(v5 + 48),
(PSHARE_ACCESS)((char *)&AdvancedHeader[1].Resource + 4),
0i64,
0);
v12 = *(_DWORD *)&AdvancedHeader[1].Flags;
LABEL_10:
++LODWORD(AdvancedHeader[1].Resource);
*(_DWORD *)&AdvancedHeader[1].Flags = v12 + 1;
v13 = 0;
*(_QWORD *)(*(_QWORD *)(v5 + 48) + 16i64) = AdvancedHeader[1].FileContextSupportPointer;
*((_QWORD *)Irp + 7) = 1i64;
*(_DWORD *)(*(_QWORD *)(v5 + 48) + 80i64) |= 8u;
*(_QWORD *)(*(_QWORD *)(v5 + 48) + 24i64) = AdvancedHeader;
LABEL_11:
if( *(_DWORD *)&AdvancedHeader[1].Flags || !RawInitiateDeleteVolume((INT64)AdvancedHeader, 0i64, 1i64) )
KeReleaseGuardedMutex(p_PagingIoResource);
*((_DWORD *)Irp + 12) = v13;
IofCompleteRequest(Irp, 1);
return v13;
}Referenced by:
RawDispatch