none
OpenPrinter 함수 호출할 때 access denied 에러 발생 경우

    일반 토론

  • OpenPrinter 함수를 실행할 세번째 파라미터에 따라서 access denied 에러가 발생할 있습니다.

         JOB_INFO_1 *pJobInfo;

         PRINTER_DEFAULTS defaults = { NULL, NULL, PRINTER_ACCESS_ADMINISTER };

         OpenPrinter(L"Printer1", &hPrinter, &defaults);  //ERROR_ACCESS_DENIED 에러 발생

    보통 A 사용자가 프린터를 추가했을 (add printer), B 사용자도 로그인하여 추가된 프린터를 사용하여 프린트 작업을 있습니다.

    그러나 프린트를 있다고 해서 프린터에 대한 모든 작업이 허용되는 것은 아닙니다.

    예를 들어 어드민 권한이 필요한 작업(프린터 상의 프린트 작업 에 대한 pausing, resuming, clearing이나프린트 작업 속성 변경 )하려고 하면 다른 사용자가 추가한 프린터에 대해서는 제한이 따릅니다. A 사용자가 추가한 프린터에 대하여 B 사용자가 있는 작업에 제한을 주는 것은 자연스러우며, 제한은 access rights통해 이뤄집니다.

    이러한 어드민 권한이 필요한 작업을 하기 위해서 OpenPrinter 함수의 세번째 파라미터에 PRINTER_ACCESS_ADMINISTER주었습니다.

    추가된 프린터에 대한 access rights확인하는 방법은 다음과 같습니다.

    특정 프린터 항목에 대하여 Printer properties – Security – Advanced 메뉴를 선택합니다.

    프린터는 brian 사용자에 의하여 추가되었기 때문에, brian 사용자에 대하여 Print 뿐만 아니라 Manage this printerManage documents허용됩니다. OwnerSYSTEM으로 되어 있으므로 SYSTEM으로는 모든 어드민 작업이 가능합니다.

    brian이나 SYSTEM아닌 다른 사용자에 대해서도 프린터에 대한 admin 권한이 필요한 작업을 허용하려면 Add 버튼을 눌러서 해당 사용자에 대한 permission설정합니다. (물론 permission 설정 권한이 있는사용자로 로그인되어 있어야 해당 버튼이 enable됩니다)

    이렇게 권한이 추가된 이후에는 해당 사용자 user1프린터에 대하여 PRINTER_ACCESS_ADMINISTER로써 OpenPrinter 함수를 실행할 있으며, SavePrinterSebJob 함수를 통한 변경 작업이 가능하게 됩니다.

    참조:

    OpenPrinter Function

    https://msdn.microsoft.com/en-us/library/windows/desktop/dd162751%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    You can call the OpenPrinter function to open a handle to a print server or to determine the access rights that a client has to a print server. To do so, specify the name of the print server in the pPrinterName parameter, set the pDatatype and pDevMode members of the PRINTER_DEFAULTS structure to NULL, and set the DesiredAccess member to specify a server access mask value such as SERVER_ALL_ACCESS. When you finish with the handle, pass it to the ClosePrinter function to close it.

    Use the DesiredAccess member of the PRINTER_DEFAULTS structure to specify the access rights that you need to the printer. The access rights can be one of the following. (If pDefault is NULL, then the access rights are PRINTER_ACCESS_USE.)

    Desired Access value

    Meaning

    PRINTER_ACCESS_ADMINISTER

    To   perform administrative tasks, such as those provided by SetPrinter.

    PRINTER_ACCESS_USE

    To   perform basic printing operations.

    PRINTER_ALL_ACCESS

    To   perform all administrative tasks and basic printing operations except for   SYNCHRONIZE (see Standard Access Rights.

    PRINTER_ACCESS_MANAGE_LIMITED

    To   perform administrative tasks, such as those provided by SetPrinter and SetPrinterData. This value is   available starting from Windows 8.1.

    generic   security values, such as WRITE_DAC

    To   allow specific control access rights. See Standard Access Rights.

     

    If a user does not have permission to open a specified printer or print server with the desired access, the OpenPrinter call will fail with a return value of zero and GetLastError will return the value ERROR_ACCESS_DENIED.






    • 편집됨 Jng.Kim 2018년 5월 16일 수요일 오전 7:49
    2018년 5월 16일 수요일 오전 7:38