다음을 통해 공유


Win32_Printer 클래스의 SetSecurityDescriptor 메서드

SetSecurityDescriptor 메서드는 프린터에 대한 액세스를 제어하는 업데이트된 버전의 보안 설명자를 작성합니다. 보안 설명자는 Win32_SecurityDescriptor 클래스의 인스턴스입니다. 자세한 내용은 보안 개체에 대한 액세스 보안 변경을 참조하세요.

이 항목에서는 MOF(Managed Object Format) 구문을 사용합니다. 이 메서드를 사용하는 방법에 대한 자세한 내용은 메서드 호출을 참조 하세요.

구문

uint32 SetSecurityDescriptor(
  [in] Win32_SecurityDescriptor Descriptor
);

매개 변수

설명자[in]

프린터와 연결된 보안 설명자입니다.

반환 값

다음 목록에 나열된 값 중 하나를 반환하거나 오류를 나타내는 다른 값을 반환합니다. 추가 오류 코드는 WMI 오류 상수 또는 WbemErrorEnum을 참조하세요. 일반적인 HRESULT 값은 시스템 오류 코드를 참조 하세요.

0

완료되었습니다.

2

사용자는 요청한 정보에 대한 액세스 권한이 없습니다.

8

알 수 없는 오류가 발생했습니다.

9

사용자에게 메서드를 실행할 수 있는 적절한 권한이 없습니다.

21

메서드 호출에 지정된 매개 변수가 잘못되었습니다.

설명

Win32_SecurityDescriptor 인스턴스는 SECURITY_DESCRIPTOR_CONTROL 데이터 형식을 나타내며 DACL(임의 액세스 제어 목록) 및 SACL(시스템 액세스 제어 목록)을 포함합니다. 자세한 내용은 액세스 제어 목록을 참조하십시오.

보안 설명자를 받을 때 SeSecurityPrivilege가 부여되거나 활성화되지 않은 경우 반환된 보안 설명자에 DACL만 반환됩니다. 자세한 내용은 권한 상수권한 있는 작업 실행을 참조하세요.

이 메서드를 호출할 때 Win32_SecurityDescriptor 인스턴스에서 DACL과 SACL을 모두 업데이트할 수 있지만 DACL 또는 SACL만 업데이트할 수도 있습니다.

SECURITY_DESCRIPTOR_CONTROL 다음 값은 DACL, SACL 또는 둘 다 업데이트되는지 여부를 결정합니다.

  • SE_DACL_PRESENT

    DACL을 업데이트해야 함을 나타냅니다. 이 값을 설정하지 않으면 WMI는 DACL의 원래 값을 유지합니다.

  • SE_SACL_PRESENT

    SACL을 업데이트함을 나타냅니다. 설정되지 않은 경우 WMI는 SACL의 원래 값을 유지합니다. SACL을 업데이트하려면 계정에 SeSecurityPrivilege 권한이 활성화되어 있어야 합니다. 스크립팅의 경우, 권한 이름은 SeSecurityPrivilege입니다. 자세한 내용은 권한 상수를 참조하세요.

그룹 트러스티와 소유자 트러스티 속성이 NULL이 아닌 경우 업데이트됩니다. 그렇지 않으면 WMI는 원래 값을 유지합니다. 자세한 내용은 WMI 보안 설명자 개체를 참조하세요.

이 메서드에 대한 호출에서 새 SACL이 NULL 이면 대상 보안 개체의 보안 설명자 SACL은 변경되지 않은 상태로 유지됩니다.

예제

다음 PowerShell 코드 샘플에서는 프린터의 보안 설명자를 설정하는 방법을 설명합니다.

# Specify the user or group
$user = "everyone"

# create instances of necessary classes
$SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
$ace = ([WMIClass] "Win32_Ace").CreateInstance()
$Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()

# Translate a name of user or group to SID
$SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])

# Get binary form from SID and byte Array
[byte[]] $SIDArray = ,0 * $SID.BinaryLength
$SID.GetBinaryForm($SIDArray,0)

# Fill Trustee object parameters
$Trustee.Name = $user
$Trustee.SID = $SIDArray

# Set AccessMask which can contain following values:
# Takeownership - 524288
# ReadPermissions - 131072
# ChangePermissions - 262144
# ManageDocuments - 983088
# ManagePrinters - 983052
# Print + ReadPermissions - 131080
$ace.AccessMask = 983052

# Set AceType. Can be 0 (Allow), or 1 (Deny), or 2 (System Audit)
$ace.AceType = 0
$ace.AceFlags = 0  

# Write Win32_Trustee object to Win32_Ace Trustee property
$ace.Trustee = $Trustee

# Write Win32_Ace and Win32_Trustee objects to SecurityDescriptor object
$SD.DACL = $ace

# Set SE_DACL_PRESENT control flag
$SD.ControlFlags = 0x0004

# Get printer object. For example 'CutePDF Writer' printer object
$Printer = gwmi win32_printer -filter "name = 'CutePDF Writer'"

# Enable SeSecurityPrivilege privilegies
$Printer.psbase.Scope.Options.EnablePrivileges = $true

# Invoke SetSecurityDescriptor method and write new ACE to specified
# printer ACL.
$Printer.SetSecurityDescriptor($SD)

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows Vista
지원되는 최소 서버
Windows Server 2008
네임스페이스
Root\CIMV2
MOF
Win32_Printer.mof
DLL
CIMWin32.dll

참고 항목

Win32_Printer

권한 상수

WMI 보안 설명자 개체

보안 개체에 대한 액세스 보안 변경