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

解決


ひろと  2003-12-08 13:20:13  No: 110521  IP: [192.*.*.*]

はじめまして。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 14:30:05  No: 110522  IP: [192.*.*.*]

pdefs.DesiredAccess = PRINTER_ACCESS_ADMINISTER

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

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

編集 削除