2

昇格を必要とせずに実行されるWindowsアプリがあります。アプリの実行中のすべてのインスタンス間で共有されるメモリ配列のファイルマッピングオブジェクトを作成する必要があります(これらのインスタンスの一部は異なるログオンセッションで実行される場合があることに注意してください)。

CreateFileMapping APIを呼び出して、グローバル名で作成します。つまり、アクセスを許可するGlobal\sharednameセキュリティ記述子を使用しますが、そのAPIはエラーコード5またはで失敗します。alleveryoneERROR_ACCESS_DENIED

次に、ドキュメントを読み始めましたが、プロセスにSeCreateGlobalPrivilege特権が必要であることがわかりました。しかし、その特権を割り当てようとすると、AdjustTokenPrivilegesがエラーコードを返しERROR_NOT_ALL_ASSIGNED、スタックします...。

それで、ここでのトリックは何ですか、その気紛れなMSは私たちにそれをどのように望んでいますか?

PS。all access for everyone以前は、同じセキュリティ記述子と名前で問題なくグローバルな名前付きミューテックス(共有メモリへの同期アクセス用)を作成できましたGlobal\sharedmutex

4

1 に答える 1

6

管理者、およびセッション 0 で実行されているサービスのみが、名前空間SeCreateGlobalPrivilegeでファイル マッピングを作成するために必要な特権を取得できます。Globalコードをサービスに再書き込みしたくないと仮定すると、ファイル マッピングを作成するために別の昇格プロセスを生成する必要があります。

于 2013-02-23T11:27:38.407 に答える