3

この質問は、現在同じ問題に直面しているインターネットのどこかで見つかりました。少し変更して、私はすでに以下の質問を変更しています。

質問:

リモート マシン (10.10.20.30) 上のファイルにアクセスしたいのですが、プログラムでそのマシンにログインする方法がわかりません。ネットワーク パス、資格情報を受け取り、ファイルのハンドルを返すシンプルな win api はありますか? \10.10.20.30\share folder\test.txt にアクセスしたいだけです。どんな提案も役に立ちます。

コーディングの意味がはっきりしていなくて申し訳ありません。詳細: 共有フォルダーで共有されているファイルにアクセスしたいのですが、アクセス許可がありません。私は::CreateFileを使用してファイルのハンドルを取得しています。しかし、この場合、エラー コード 5 (ACCESS_DENIED) が表示されます。共有されているファイルにアクセスするには、ユーザー (クライアント) 資格情報 (ユーザー名パスワード) を使用する必要があります。ファイルのハンドルが必要なだけです。間違っている場合は教えてください::MSDNが言うように、セキュリティ属性を使用または変更することにより、この場合CreateFileを使用できません。CreateFile は、既存のファイルを開くときに lpSecurityDescriptor メンバーを無視します。Windows シェルを使用することも考えましたが、解決策を見つけることができませんでした。

問題の詳細 *まあ、要件はリモート マシンでこのようなものです。私は EveryOne 権限を持っていません。例を通して説明しましょう。少なくとも 3 台のコンピューターを持つ特定のドメインを持つネットワークがあるとします。5 台としましょう。名前は C1(クライアント)、C2(宛先)、C3、C4、C5 です。この場合、C2 マシンでファイル (任意のタイプ) を作成し、それを MyFolder というフォルダーに配置します。次に、それを共有してから、EveryOne を削除します。その後、アクセスするためのユーザーとして C5 を追加します。これで、::CreateFile 実装だけでいくつかのコードを記述し、それをマシン C1 (クライアント) と C5 (アクセス許可がある) の両方で実行できることがわかります。client(C1) が ACCESS_DENIED を意味するエラー 5 を受け取ることがわかりますが、C5 はそれを実行し、ファイル ハンドルを取得します...もう一度質問を繰り返します。ユーザー名とパスワード、

アドバイスお願いします よろしくお願いします

::CreateFile がアクセス拒否で失敗するのは、シェル プログラミングまたはその他の解決策またはヒントです

4

2 に答える 2

2

ファイルにアクセスするための十分なアクセス許可を持つユーザー アカウントでアプリが実行されていない場合は、アクセス権を持つユーザーを一時的に偽装する必要があります。を使用LogonUser()して目的のユーザー アカウントにログインし、そのトークンを取得し、そのトークンを に渡してImpersonateLoggedOnUser()そのユーザーを偽装し、CreateFile()(偽装された権限を使用する) を呼び出して必要に応じてファイルを使用し、ファイルを閉じて を呼び出しますRevertToSelf()。なりすましはやめましょう。

于 2013-09-24T19:00:02.573 に答える
1

CreateFile失敗した場合ERROR_ACCESS_DENIEDは、呼び出したプロセスが、CreateFileその操作を実行するための十分な権限を持たないユーザー アカウントで実行されていることを意味します。

次の方法で問題を解決します。

  1. そのユーザーに十分な権限を付与します。
  2. 十分な権限を持つ別のユーザー アカウントでプロセスを実行します。または、偽装を使用しCreateFileて、別のユーザー トークンで呼び出します。
  3. 元の権限の低いユーザーが操作を実行する権利を持つように、問題のファイルを保護します。

ここで肝心なのは、ここではいくらコーディングしても役に立たないということです。この問題は、問題のファイル システム オブジェクトのセキュリティに関するものです。これは、プログラミングの問題ではなく、管理の問題です。

于 2013-09-24T08:06:32.933 に答える