API単位でのアカウント実行

[戻る]
GON 2006/07/21(金) 23:05:44
::CopyFileで、別マシン(WindowsXP)の共有フォルダに¥¥でファイルをコピーしたいで
す。
しかし、アカウントの認証に失敗して、ファイルコピーできませんでした。
コピー元マシンとコピー先マシンにはadministrator/adminとユーザがいます。
そこで、このPG(A)を起動する別のPG(B)をかまして、
Bでadministrator/adminのアカウントを取得して、administratorでAを実行することで
、別マシンへのファイルコピーに成功しました。

しかし、以下のようにしたいです。
・Aはシステムアカウントで直接サービス起動する。
・Aの中でadministrator/adminアカウントを取得して、administratorとしてCopyFileAPI
を実行する。

この用にAPI単位で、アカウント実行する方法があるようでしたらご教授ください。

環境:WINXP
   VC6.0

kure 2006/07/22(土) 10:04:51
API単位ではありませんが、
スレッド単位でユーザーを偽装することが可能です。

手順は以下のとおり。

1. LogonUserでユーザートークンを取得
2. ImpersonateLoggedOnUserでユーザーを偽装
3. なんらかの処理を実行
4. RevertToSelfで偽装を解除

ドメインを組んでいる場合はドメインユーザーアカウントを
ImpersonateLoggedOnUserにその情報を指定できますし、
そうでない場合でもローカルとリモートに同名・同パスワードの
ユーザーを作成して、その情報でアクセスすることが可能です。

GON 2006/07/24(月) 00:15:14
[[解決]]
スレッド単位で偽装できればOKです。
ありがとうございました。
ちなみに、サービス起動したプログラムで¥¥コピーする方法は他にありますか?

kure 2006/07/24(月) 07:44:27
SHFileOperationを使うとか、
CreateFileして自前でReadFile,WriteFileするくらいでしょうか。

GON 2006/07/25(火) 23:29:52
理解しました。
ありがとうございます。

古いスレッドには追加発言できません。