' アクセストークンの特権セット情報を定義する構造体 Structure TOKEN_PRIVILEGES Dim PrivilegeCount As Integer <VBFixedArray(0)> Public Privileges() As LUID_AND_ATTRIBUTES End Structure
' 指定したアクセストークンを設定する関数の宣言 Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _ (ByVal TokenHandle As Integer, _ ByVal DisableAllPrivileges As Integer, _ ByRef NewState As TOKEN_PRIVILEGES, _ ByVal BufferLength As Integer, _ ByRef PreviousState As TOKEN_PRIVILEGES, _ ByRef ReturnLength As Integer) As Integer
Private Sub PowerOff() Dim udtNewState As New TOKEN_PRIVILEGES Dim udtPreviousState As New TOKEN_PRIVILEGES 中略 ' 新しいアクセストークンを指定 With udtNewState ReDim .Privileges(0) .PrivilegeCount = UBound(.Privileges) + 1 .Privileges(0).Luid = udtLuid .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED End With ReDim udtPreviousState.Privileges(0) ' 新しいアクセストークンを設定 lngWin32apiResultCode = _ AdjustTokenPrivileges(lngHandleToken, False, udtNewState, _ Len(udtPreviousState), udtPreviousState, lngLengthReturn) '↑ここでエラー 以下略
< StructLayout( LayoutKind.Sequential )> _ Public Structure TOKEN_PRIVILEGES Dim PrivilegeCount As Integer < MarshalAs( UnmanagedType.ByValArray, SizeConst:=1 )> _ Public Privileges As LUID_AND_ATTRIBUTES() End Structure という意味なら、とっくに試してみましたが、結果は同じです。