私のアプリケーションはサービスとして実行され、ある時点で、システム上の既存のすべてのユーザー アカウントをループし (これは で実行できると考えましたNetUserEnum()
)、見つかった各ユーザーの %APPDATA% パスの下にある特定のファイルにアクセスする必要があります。問題は、そのユーザー固有のパス (%APPDATA%) を取得する方法がわからないことです。
アプリケーションはサービス (SYSTEM) として実行されるため、環境またはSHGetFolderPath()
. 最初は利用できると思ってLogonUser()
いましたが、ユーザー、管理者、またはシステムでアプリケーションテストコードを実行しても、常にエラー1326がスローされます。(テスト プラットフォームとしての winxp)。ユーザーのログイン ハンドルを取得する方法があれば、SHGetFolderPath()
またはExpandEnvironmentStringsForUser()
API で使用できますが、正しいですか?
したがって、これまで LogonUser() で試したコードは次のとおりです(はい、ユーザー名は正しいです):
LogonUser(
pw->usri1_name,
L".",
NULL,
LOGON32_LOGON_BATCH,
LOGON32_PROVIDER_DEFAULT,
&authtoken
)
おそらくパスワードが必要ですが、顧客のマシンでそれを知る方法はありません。クイック検索で見つけたすべての API は、LogonUser() の HANDLE に依存しているようですが、これは明らかに使用できません...
トリッキーでないアイデアやトリッキーなアイデアは大歓迎です!