- - PR -
VB2005 ExpressにてW2Kでのシャットダウンをするのに特権を有効しようとするが有効にならない。
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-19 01:02
Private Structure LUID
Dim UsedPart As Long Dim IgnoredForNowHigh32BitPart As Long End Structure Private Structure TOKEN_PRIVILEGES Dim PrivilegeCount As Long Dim TheLuid As LUID Dim Attributes As Long End Structure Private Declare Function OpenProcessToken Lib "advapi32" ( _ ByVal ProcessHandle As IntPtr, _ ByVal DesiredAccess As Integer, _ ByRef TokenHandle As IntPtr _ ) As Boolean Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" ( _ ByVal lpSystemName As String, _ ByVal lpName As String, _ ByRef lpLuid As LUID _ ) As Boolean Private Declare Function GetCurrentProcess Lib "kernel32" () As IntPtr Private Declare Function AdjustTokenPrivileges Lib "advapi32" ( _ ByVal TokenHandle As IntPtr, _ ByVal DisableAllPrivileges As Boolean, _ ByRef NewState As TOKEN_PRIVILEGES, _ ByVal BufferLength As Integer, _ ByRef PreviousState As TOKEN_PRIVILEGES, _ ByVal ReturnLength As IntPtr _ ) As Boolean Private Declare Function ExitWindowsEx Lib "user32" ( _ ByVal dwOptions As Int32, _ ByVal dwReserved As Int32 _ ) As Int32 Private Const TOKEN_QUERY = &H8 Private Const TOKEN_ADJUST_PRIVILEGES = &H20 Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege" Private Const SE_PRIVILEGE_ENABLED = &H2 Public Const EWX_FORCE = &H4 Public Const EWX_LOGOFF = &H0 Public Const EWX_REBOOT = &H2 Public Const EWX_SHUTDOWN = &H1 Public Const EWX_POWEROFF = &H8 Public Sub sShutdown(ByVal myFlags As Long) Dim lngResult As Boolean If CreateObject("SYSINFO.Sysinfo").OSPlatform = 2 Then Dim hTokenHandle As IntPtr Dim tmpLuid As LUID Dim tkpNew As TOKEN_PRIVILEGES lngResult = OpenProcessToken(GetCurrentProcess, TOKEN_QUERY Or TOKEN_ADJUST_PRIVILEGES, hTokenHandle) If Not lngResult Then Exit Sub lngResult = LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, tmpLuid) If Not lngResult Then Exit Sub tkpNew.PrivilegeCount = 1 tkpNew.TheLuid = tmpLuid tkpNew.Attributes = SE_PRIVILEGE_ENABLED lngResult = AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Nothing, Nothing, Nothing) If Not lngResult Then Exit Sub End If lngResult = ExitWindowsEx(myFlags, 0&) End Sub VB2005 Express で上記のコードを書き込んでいますがAdjust実行後のlngResultにはfalseしか返ってこないのですが、どの部分が間違っているのかがわからないでいます。 | ||||||||||||||||||||
|
投稿日時: 2006-11-19 02:00
取りあえず、LUID は 16 バイトもないと思います。
| ||||||||||||||||||||
|
投稿日時: 2006-11-19 17:16
LUIDが16バイトもないという事ですがどのようにしたらいいのですか?
ヒントのHPとかあれば教えてください。 | ||||||||||||||||||||
|
投稿日時: 2006-11-19 17:48
自分で調べられるだろう。 | ||||||||||||||||||||
|
投稿日時: 2006-11-20 23:35
反対に、(投稿日時: 2006-11-19 01:02) のコードは、なにを参照して作成したのか、教えてください。
となっていますが、私が MSDN (2006JAN) を調べたところ、次のように定義されています。
このことから、次のような定義なると思うのです。
LUID_AND_ATTRIBUTES が抜けているのですが、なにを参考にされたのですか? _________________ |
1