現在、CreateProcessWithLogonWというAPIを利用して、
一時的に管理者権限でレジストリのアクセス許可を変更しようとしています。
ですがネット上で見つけたソースを参考にしているのですがうまくいきません。
(http://www.accessclub.jp/bbs2/0052/beginter16952.html)
いろいろ調べてはいるのですが解決の糸口も見つかりません。
ソースの一部を載せておきますのでどなたか分かる方がいたら教えていただけないでしょうか。
開発環境はXPPro(SP1),VB6です。
よろしくお願いいたします。
--------------------------------------------------------------------------------------------
StartInfo.cb = LenB(StartInfo)
StartInfo.dwFlags = 0&
UserName$ = "administrator"
Domain$ = ""
Pass$ = TxtPass.Text
NullStr$ = ""
MP 11
RegSet$ = "C:\SubInAcl.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes /grant=user=F"
rc% = CreateProcessWithLogon( _
StrPtr(UserName$), StrPtr(NullStr$), StrPtr(Pass$), _
LOGON_NETCREDENTIALS_ONLY, StrPtr(RegSet$), StrPtr(NullStr$), _
CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, _
ByVal 0&, StrPtr(NullStr$), StartInfo, ProcessInfo)
If rc% = 0 Then
CloseHandle ProcessInfo.hThread
CloseHandle ProcessInfo.hProcess
ErrBox "CreateProcessWithLogon(アクセス権追加)に失敗しました。"
Exit Function
End If
Shell SysDir$ & "REGSVR32.EXE /s " & OCX_PATH$, 6
RegSet$ = "C:\SubInAcl.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE\Classes /deny=user=F"
rc% = CreateProcessWithLogon( _
StrPtr(UserName$), StrPtr(NullStr$), StrPtr(Pass$), _
LOGON_NETCREDENTIALS_ONLY, StrPtr(RegSet$), StrPtr(NullStr$), _
CREATE_DEFAULT_ERROR_MODE Or CREATE_NEW_CONSOLE Or CREATE_NEW_PROCESS_GROUP, _
ByVal 0&, StrPtr(NullStr$), StartInfo, ProcessInfo)
CloseHandle ProcessInfo.hThread
CloseHandle ProcessInfo.hProcess
MP 0
If rc% = 0 Then
ErrBox "CreateProcessWithLogon(アクセス権削除)で失敗しました。"
End If
--------------------------------------------------------------------------------------------
>うまくいきません
どううまくいかないのかわかりません
引数の設定など、特におかしなところはないと思うのですが
CreateProcessWithLogonが成功しません。
(成功した場合は0以外の値が返ります。)
別のEXEでも試したのですがCreateProcessWithLogonの戻り値は0で返ってきます。
自己解決しました。
機能を組み込んでいたプログラム側に原因があったようです。
ツイート | ![]() |