SmKmStoreCreatePrepare

NTSTATUS __stdcall SmKmStoreCreatePrepare(
        _SM_CREATE_REQUEST *CreateRequest,
        INT8 RequestorMode,
        INT8 **EncryptionKeyOut,
        _SMST_PARAMETERS *SmStParams){
  unsigned int v4; 
  _SM_CREATE_REQUEST *v5; 
  NTSTATUS v6; 
  VOID *v9; 
  _SMST_PARAMETERS v10; 
  __int64 v11; 
  VOID *v13; 

  v4 = *CreateRequest;
  v5 = CreateRequest + 2;
  v6 = 0;
  v9 = 0i64;
  if( (unsigned __int8)*CreateRequest != 6 || v4 >= 0x400 )
    return -1073741811;
  if( RequestorMode )
  {
    if( (v4 & 0x300) != 0 || *(_BYTE *)v5 )
      return -1073741790;
  }
  else if( *(_BYTE *)v5 )
  {
    v10 = CreateRequest[12];
    if( v10 )
    {
      LODWORD(v13) = SSHSupportAllocateNonPaged(v10, 0x4B456D73u);
      v9 = v13;
      if( !v13 )
        return -1073741670;
    }
    memmove(v9, *((const VOID **)v5 + 4), v10);
    v11 = *((_QWORD *)v5 + 7);
    goto LABEL_6;
  }
  v10 = 0;
  v11 = 0i64;
LABEL_6:
  *(_QWORD *)SmStParams = v5;
  *((_QWORD *)SmStParams + 1) = v9;
  SmStParams[4] = v10;
  *((_QWORD *)SmStParams + 3) = v11;
  *EncryptionKeyOut = (INT8 *)v9;
  return v6;
}

Referenced by:

SmProcessCreateRequest