FsRtlAllocateExtraCreateParameter

NTSTATUS __stdcall FsRtlAllocateExtraCreateParameter(
        LPCGUID EcpType,
        UINT32 SizeOfContext,
        FSRTL_ALLOCATE_ECP_FLAGS Flags,
        PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
        UINT32 PoolTag,
        PVOID *EcpContext){
  UINT32 v6; 
  int v9; 
  int v10; 
  char *PoolWithQuotaTag; 
  GUID v12; 
  v6 = SizeOfContext + 72;
  *EcpContext = 0i64;
  if( SizeOfContext >= 0xFFFFFFB8 )
    return -1073741675;
  v9 = (Flags & 2) != 0 ? 66 : 2;
  v10 = (Flags & 2) != 0 ? 512 : 1;
  if( (Flags & 1) != 0 )
    PoolWithQuotaTag = (char *)ExAllocatePoolWithQuotaTag((POOL_TYPE)(v10 | 8), v6, PoolTag);
  else
    PoolWithQuotaTag = (char *)ExAllocatePoolWithTag((_POOL_TYPE)v10, v6, PoolTag);
  if( !PoolWithQuotaTag )
    return -1073741670;
  *((_DWORD *)PoolWithQuotaTag + 1) = 0;
  *((_QWORD *)PoolWithQuotaTag + 2) = 0i64;
  *((_QWORD *)PoolWithQuotaTag + 1) = 0i64;
  *(_DWORD *)PoolWithQuotaTag = 1215324997;
  v12 = *EcpType;
  *((_QWORD *)PoolWithQuotaTag + 7) = 0i64;
  *((_QWORD *)PoolWithQuotaTag + 8) = 0i64;
  *(GUID *)(PoolWithQuotaTag + 24) = v12;
  *((_QWORD *)PoolWithQuotaTag + 5) = CleanupCallback;
  *((_DWORD *)PoolWithQuotaTag + 12) = v9;
  *((_DWORD *)PoolWithQuotaTag + 13) = v6;
  *EcpContext = PoolWithQuotaTag + 72;
  return 0;
}

Referenced by:

FsRtlAllocateExtraCreateParameterFromLookasideList
IopSymlinkEnforceEnabledTypes
PspCreateUserProcessEcp