1

非常に特殊なセキュリティアプリケーション用の「特殊ファイルシステム」を作成しました。

空のディレクトリを使用して再解析ポイントを作成します。この再解析ポイントの背後には、NTFSとユーザーモードプログラム間の通信を処理するフィルタードライバーがあります。このドライバーは、暗号化/復号化と制御作業(FUSE、TrueCrypt、RamDiscなどの混合)を実行します。すべてがC/C ++でネイティブであり、Win7x64で正常に動作します。

今、私はそれをwindwosxpx64プロフェッショナルのために機能させるための素晴らしい仕事をしています。アプリケーション全体が管理者権限で実行されている場合は正常に機能しますが、ユーザーアカウントに切り替えると、マウントされたディレクトリにアクセスできません。

マウンターと「特別なファイルシステム」(sfsと名付けます)はシステムサービスであり、他のアプリはユーザーアカウント(COM関連)で実行する必要があり、マウント操作は成功します(マウント操作後に管理者アカウントに切り替えると、ディレクトリにアクセスする)、アプリケーションの他の部分も正常に機能しますが、私が管理できないのは、このディレクトリにアクセスすることだけです。

私は「全員」とユーザーグループおよび特定のユーザーに、ドライバー、ライブラリ(ドライバーとsfs間のリンク)、マウンター、および特殊ファイルシステムに対するすべてのアクセス許可を与え、レジストリでも多くのことを行いました。また、マウントされたdir(すべてのリグ、所有者など)にこのアクセス許可を与えましたが、何も機能しません。

デバッグアウトプリントは、ディレクトリまたは内部のファイルの要求が「sfs」に到達しないことを示しています。IO-Managerがこのアドレスに何かを送信することはないようです。もう1つの問題は、OSからすべてのデバッグ出力を取得できないことです(ローカルデバッグモードで起動し、SysInternalsのDebugView.exeを使用します)が、それは別の話です。

私は何を取りこぼしたか?XPとWin7のセキュリティシステムの違いは何ですか?XPに私が知らない基本的な制限はありますか?

コードのスニペットが必要かどうか尋ねてください。

アドバイスやアイデアは大歓迎です!

4

1 に答える 1

0

それを見つけた!

デバイス自体のセキュリティを設定するのを忘れました!これを早く見つけられないのはなんて悪いことでしょう。:-(

これは、マウントサービスのセクションです。

static VOID GetSecAttr(PSECURITY_ATTRIBUTES SecAttr)
{

   LPTSTR sd = L"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GRGW;;;WD)(A;;GR;;;RC)";

   ZeroMemory(SecAttr, sizeof(SECURITY_ATTRIBUTES));

   ConvertStringSecurityDescriptorToSecurityDescriptor(sd, SDDL_REVISION_1, &SecAttr->lpSecurityDescriptor, NULL);

   SecAttr->nLength = sizeof(SECURITY_ATTRIBUTES);
   SecAttr->bInheritHandle = TRUE;
}

static VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{

//... some declarations ...
   SECURITY_ATTRIBUTES sa;

//... some stuff like syncronisation, named pipe and so on...
   GetSecAttr(&sa);

   device = CreateFile(
       MY_DEVICE_NAME,
       GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ | FILE_SHARE_WRITE,
       &sa,                //!!! and this was NULL!!!
       OPEN_EXISTING, 
       FILE_FLAG_OVERLAPPED, 
       NULL);

   if (device == INVALID_HANDLE_VALUE) {/*...*/}
}

私を助けるために時間を費やしてくれた皆さんに感謝します!

...そしてなぜこれがWin7で機能したのですか?!?

于 2012-10-03T09:24:00.050 に答える