次の方法で共有


実行可能イメージ

実行可能ファイルは、メモリ マップ済みイメージ ファイルを使用してプロセスのアドレス空間に読み込まれます。 マッピングはセクションによって行われるため、ファイル自体を開く必要も、ハンドルを作成する必要もありません。 ファイル システムでは、これらの特別なセマンティクスがメモリ マップ済みファイルをサポートしていると仮定して、それらをチェックして適用する必要があります。 たとえば、この例でチェックする FASTFAT ファイル システム コードは、WDK に含まれる fastfat サンプルの Create.c ソース ファイルの FatOpenExistingFCB 関数にあります。

    //
    //  If the user wants write access to the file, make sure there
    //  is not a process mapping this file as an image. Any attempt to
    //  delete the file will be stopped in fileinfo.c
    //
    //  If the user wants to delete on close, check at this
    //  point though.
    //

    if (FlagOn(*DesiredAccess, FILE_WRITE_DATA) || DeleteOnClose) {

        Fcb->OpenCount += 1;
        DecrementFcbOpenCount = TRUE;

        if (!MmFlushImageSection( &Fcb->NonPaged->SectionObjectPointers,
                                  MmFlushForWrite )) {

            Iosb.Status = DeleteOnClose ? STATUS_CANNOT_DELETE :STATUS_SHARING_VIOLATION;
            try_return( Iosb );
        }
    }

したがって、ファイル システムでは、ファイルが開いていなくても、実行可能イメージを含むメモリ マップ済みファイルが削除されないようにすることができます。