IopGetSetSpecificExtension

VOID __stdcall IopGetSetSpecificExtension(
        _FILE_OBJECT *FileObject,
        _FILE_OBJECT_EXTENSION_TYPE Type,
        UINT64 Size,
        UINT8 SetOperation,
        PVOID *TypeExt,
        PVOID *FoExt){
  UINT64 v7; 
  VOID *v10; 
  INT64 v11; 
  _IOP_FILE_OBJECT_EXTENSION *v12; 
  void *v13; 
  CHAR *Pool_0; 
  _IOP_FILE_OBJECT_EXTENSION *FileObjectExtension[5]; 
  FileObjectExtension[0] = 0i64;
  v7 = (unsigned int)Size;
  if( !SetOperation || IopAllocateFileObjectExtension(FileObject, 0i64) >= 0 )
  {
    v10 = IopGetFileObjectExtension(FileObject, Type, (VOID **)FileObjectExtension);
    v12 = FileObjectExtension[0];
    v13 = v10;
    if( !v10 && SetOperation )
    {
      Pool_0 = IopVerifierExAllocatePool_0(v11, v7);
      v13 = Pool_0;
      if( !Pool_0 )
        return;
      memset((INT64)Pool_0, 0i64);
      if( IopSetTypeSpecificFoExtension(v12, Type, v13) < 0 )
      {
        ExFreePoolWithTag(v13, 0);
        v13 = IopGetFileObjectExtension(FileObject, Type, 0i64);
      }
    }
    if( TypeExt )
      *TypeExt = v13;
    if( FoExt )
      *FoExt = v12;
  }
}

Referenced by:

IoCopyDeviceObjectHint
IoCreateStreamFileObjectEx2
IopAdjustFileObjectKeepAliveCount
IopAllocateFoExtensionsOnCreate
IopCheckInitiatorHint
IopGetSetStreamIdentifier
IopParseDevice
IopRetrieveTransactionParameters
IopSetLockOperationProcess