「アクセスが拒否されました」のエラーを回避するには?

解決


ひろと  2003-12-08 22:20:13  No: 110521

はじめまして。VBというより、Win32APIの質問です。
長文で申し訳ありません。よろしいでしょうか。

  現在VB6のコード上に、Win32APIのGetPrinterという関数を使用し、
プリンターの情報を取得しようとしています(バッファの必要なサイズを取得する為)
Win98は、成功します。
Windows2000は、エラーとなります。
「アクセスが拒否されました」

なぜこのようなことが起きるか、どなたかご教授下さい。以下詳細です。

補足1・Administrator権限を持つユーザでプリンターを作成。テストプリントは可能
補足2・プリンタのアクセスの許可は、プリンタの管理は許可にチェックがある。
補足3・OpenPrinter関数は成功している。(と思われる。ステータスはZERO以外の為)

    pdefs.pDatatype = vbNullString
    pdefs.pDevMode = 0
    pdefs.DesiredAccess = PRINTER_ACCESS_ADMINISTER

    ' プリンタ名を指定
    strDeviceName = strPrinterName
    
    ' プリンタのオブジェクトハンドルを取得
    If OpenPrinter(strDeviceName, lnghPrinter, pdefs) = 0 Then
       strErrAPI = "OpenPrinter"
       GoSub UCoSetPrinter_Err
    End If
    
    ' 構造体のレベルを指定
    lngPInfo2Lvl = 2
    
    Dim strMsg As String
    ' バッファの必要なサイズを取得(戻り値は0なのでError Trapしない)
'コメント    Call GetPrinter(lnghPrinter, lngPInfo2Lvl, ByVal vbNullString, 0, lngPInfo2Needed)
'上記の詳細を知るため、以下に変更し、エラーのコードを取得。
    
    If GetPrinter(lnghPrinter, lngPInfo2Lvl, ByVal vbNullString, 0, lngPInfo2Needed) = 0 Then
        strMsg = pstrLastDllErrorText(Err.LastDllError)
        MsgBox "エラー コード : " & strMsg
    End If

以上です。宜しくお願いします。


ひろと  2003-12-08 23:30:05  No: 110522

pdefs.DesiredAccess = PRINTER_ACCESS_ADMINISTER

pdefs.DesiredAccess = PRINTER_ALL_ACCESS
に変更したら、正常に動作しました。
お騒がせしました。

しかしその後のSetPrinterでエラーが発生しました
(本文にはありません)。
その件はまた、新たに質問させてください。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加