2011-01-10 34 views
0

私はVbScriptを使用してWin32_Serviceのセキュリティ記述子を取得しています。私は、次のコードを使用しています:VBScriptを使用してWin32_Serviceセキュリティ記述子を取得する

SE_DACL_PRESENT = &h4 
ACCESS_ALLOWED_ACE_TYPE = &h0 
ACCESS_DENIED_ACE_TYPE = &h1 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2") 

Set colInstalledPrinters = objWMIService.ExecQuery _ 
    ("Select * from Win32_Service") 

For Each objPrinter in colInstalledPrinters 
    Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer 
    Return = objPrinter.GetSecurityDescriptor(objSD) 
    If (return <> 0) Then 
    WScript.Echo "Could not get security descriptor: " & Return 
    wscript.Quit Return 
    End If 
' Extract the security descriptor flags 
    intControlFlags = objSD.ControlFlags 
    If intControlFlags AND SE_DACL_PRESENT Then 
' Get the ACE entries from security descriptor 
    colACEs = objSD.DACL 
    For Each objACE in colACEs 
' Get all the trustees and determine which have access to printer 
    WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name 
    If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then 
    WScript.Echo vbTab & "User has access to printer" 
    ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then 
    WScript.Echo vbTab & "User does not have access to the printer" 
    End If 
    Next 
    Else 
    WScript.Echo "No DACL found in security descriptor" 
End If 
Next 

しかし、私はメッセージが結果のコードを言ってもらう、私はそれを実行するたびに、むしろ the manualで定義されたエラーコードより-2147023582何か、です。

誰でもアイデアがありますか?私はWindows 7のプロフェッショナル64ビットを使用しています。

数値は-2147023582です。何らかの64ビット問題である可能性がありますか?それは符号付き整数として格納されている符号なし整数のようには見えませんか?

(PS:variablenamesは気にしないでください...私はmsdnの例を取り上げました)。

答えて

3

エラーコード-2147023582(0x80070522)は、「クライアントが必要な特権を保持していません」という意味です。 WMIモニカでSecurity特権が不足している可能性があり、管理者としてスクリプトを実行する必要があります。 (少なくとも、あなたのスクリプトは管理者として実行されたときに64ビットVistaでうまく動作する)

+0

ありがとう。しかし、それはマニュアル(上掲)に従ってコード2または9を返すべきではありませんか? -2147023582の値は表に定義されていません。 – agnsaft

+0

@invictus:どうやら、必ずしもそうではありません。これは一般的なWindowsシステムのエラーです。 – Helen

+0

あなたは正しいです。 vbscriptを使用して管理者権限を要求し、UACを起動できるかどうか知っていますか? – agnsaft

関連する問題