Windows XP X64 ProfのユーザーアカウントからマウントされたフィルタドライバのReparse Pointディレクトリにアクセスできない

StackOverflow https://stackoverflow.com//questions/12692755

質問

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

空のディレクトリを使用してryparseポイントを作成します。このRyarse Pointの背後にあるフィルタドライバは、NTFSとUSERMODEプログラムとの間の通信を取り扱い、これはいくつかの暗号化/復号化および制御作業を実行している(ヒューズ、TrueCrypt、RAMDISC、...)。全体がC / C ++のネイティブで、作品は細かいウィンドウWin7 x64です。

今、Windwos XP X64 Professionalのために働くための素晴らしい仕事をしています。アプリケーション全体が管理権限で実行されている場合、それは正常に動作しますが、ユーザーアカウントに切り替えるとマウントされたディレクトリにアクセスできません。

マウンタと「特別ファイルシステム」(SFS名)はシステムサービスであり、他のアプリはユーザアカウント(COM関連)で実行されなければならないため、マウント操作は成功しています(マウント後に管理者アカウントに切り替えるとき操作iディレクトリにアクセスできます)、アプリケーションの他の部分もうまくいきますが、私が管理できないのはこの非常にディレクトリにアクセスすることです。

私は "Everyone"とユーザーグループと特定のユーザーすべての権限、ライブラリ(ドライバとSFSの間のリンク)、マウンタ、特別なファイルシステムで、レジストリにも多くの権限を与えました。私はマウントされたDIR(すべてのRIGTH、所有者、...)にこの権限を与えましたが、何も機能しませんでした。

デバッグアウトプリントは、ディレクトリまたはファイル内のファイルの要求が「SFS」になることを示しています。 IOマネージャーがこのアドレスに送信しないことは決してないようです。その他の問題は、OSからすべてのデバッグアウトプリントを取得することができません(ローカルデバッグモードでの起動し、SysInternalsからdebugview.exeを使用します)、それは別のストーリーです。

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

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

あらゆるアドバイスやアイデアは大歓迎です!

役に立ちましたか?

解決

それを見つけました!

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

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

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のためにこの仕事をしましたか??

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top