[タイトル]
ネイティブドライバを使用した場合にクライアントプリンタが自動作成されない
[現象]
一部のプリンタドライバまたはCitrixユニバーサルプリンタドライバをネイティブドライバまたはCitrixユニバーサルプリンタドライバとして使用している場合、Citrix Presentation Server 4.0への接続時にクライアントプリンタが自動作成されない場合があります。
本事象が発生している場合、Presentation Server上のイベントビューアに下記のいずれかのエラーメッセージを確認することができます。
ソース: MetaFrameEvents
種類: エラー
イベントID: 1116
説明: プリンタの自動作成に失敗しました。
理由:AddPrinter()がステータス0x3EBで失敗しました。

ソース: MetaFrameEvents
種類: エラー
イベントID: 1116
説明: プリンタの自動作成に失敗しました。理由:AddPrinter()がステータス0x5で失敗しました。

コマンドプロンプトからnet helpmsg 1003コマンドを実行すると、以下のように出力されます。
「この関数を完了できません。」
詳しくは、CTX107635 - 「クライアントプリンタの自動作成に失敗しました。理由:AddPrinter()がステータス0x5で失敗しました。」(イベントID:116)というイベントが記録されるを参照して下さい。
[原因1]
このエラーコードは、スプーラのWindows NT Local Print Providerがドライバを読み込むことができなかった場合に返されます。これは、呼び出す側(この場合Citrix Print Manager Service)にこの動作を実行する適切な権限が与えられていないことが原因で発生する場合があります。
Citrix Presentation Server 4.0 ではプリンタ自動作成の際に使用するOpenPrinterW()関数 をCtx_SmaUser権限(Presentation Server上のプリンタ自動作成用ローカルアカウント)で呼び出す必要があります。Presentation Server 4.5の場合は、アカウントにCtx_cpsvcuser権限が必要です。
これを確認するには、Ctx_SmaUserをローカルの管理者グループへ追加するか、Citrix Print Manager Serviceを変更してCtx_SmaUserではなくローカルシステムで起動するようにします。どちらを使用した場合でもクライアントプリンタが正しく作成される場合は、権限が問題になっていると考えられます。
[解決方法1]
SysinternalsのFilemonまたはRegmonなどのツールを使用すると、権限についての切り分けを行うことができます。また、CTX106845 - Ctx_SmaUserアカウントに必要な権限と権利 を参照して、Ctx_SmaUserアカウントが正しく設定されているかどうかを確認します。Presentation Server 4.5で必要なCtx_cpsvcuserアカウントについて、詳しくはCTX115949 - Ctx_CpsvcUserアカウントに必要な権限と権利を参照してください。
[原因2]
また、OpenPrinterW() 関数をシステムアカウント権限で呼び出すような実装のプリンタドライバを使用する場合は、OpenPrinterW() 関数において、エラーAccess Denied (0x5)が返され、プリンタの自動作成に失敗します。
以下は、この問題が発生するネイティブプリンタドライバの自動作成時に、Presentation Server上のPrint Spoolerサービス(spoolsv.exe)にデバッガをアタッチして記録したデバッグログです。
例
0:007> kv
ChildEBP RetAddr Args to Child
00a2ee50 014db166 00e375e0 00a2ee6c 01537c90 WINSPOOL!OpenPrinterW+0x2 (FPO: [Non-Fpo])
00a2ee74 014daf5c 00e375e0 00000002 00000010 0x00a4fcf8
00a2ee8c 014d5508 00e375e0 00000003 00000001 0x00b3ebe7
00a2eea4 72ed2104 00e375e0 00000003 00000001 0x00c2dad6
00a2eef0 75fadff2 00e375e0 00000003 00000001 WINSPOOL!SpoolerPrinterEventNative+0x57 (FPO: [Non-Fpo])
00a2ef0c 75faf9d0 00e375e0 00000003 00000000 localspl!SplDriverEvent+0x21 (FPO: [Non-Fpo])
00a2ef30 75f9a9b4 00e2a920 00000003 00000000 localspl!PrinterDriverEvent+0x46 (FPO: [Non-Fpo])
00a2f3f8 75f982de 00000000 00000002 00e4ba40 localspl!SplAddPrinter+0x5f3 (FPO: [Non-Fpo])
00a2f424 73f37c8f 00000000 00000002 00e4ba40 localspl!LocalAddPrinterEx+0x2e (FPO: [Non-Fpo])
00a2f874 73f37b76 00000000 00000002 00e4ba40 SPOOLSS!AddPrinterExW+0x151 (FPO: [Non-Fpo])
00a2f890 01007e29 00000000 00000002 00e4ba40 SPOOLSS!AddPrinterW+0x17 (FPO: [Non-Fpo])
00a2f8ac 01006ec3 00000000 00e35e80 000aa8a8 spoolsv!YAddPrinter+0x75 (FPO: [Non-Fpo])
00a2f8d0 77c10f3b 00000000 00e35e80 000aa8a8 spoolsv!RpcAddPrinter+0x37 (FPO: [Non-Fpo])
00a2f8f8 77c823f7 01006e8c 00a2fae0 00000005 RPCRT4!Invoke+0x30
00a2fcf8 77c826ed 00000000 00000000 000d1134 RPCRT4!NdrStubCall2+0x299 (FPO: [Non-Fpo])
00a2fd14 77c109be 000d1134 000b84f0 000d1134 RPCRT4!NdrServerCall2+0x19 (FPO: [Non-Fpo])
00a2fd48 77c1093f 01002c47 000d1134 00a2fdec RPCRT4!DispatchToStubInCNoAvrf+0x38 (FPO: [Non-Fpo])
00a2fd9c 77c10865 00000005 00000000 0100d228 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x117 (FPO: [Non-Fpo])
00a2fdc0 77c134b1 000d1134 00000000 0100d228 RPCRT4!RPC_INTERFACE::DispatchToStub+0xa3 (FPO: [Non-Fpo])
00a2fdfc 77c11bb3 000ccbe8 000ba7e8 000b9560 RPCRT4!LRPC_SCALL::DealWithRequestMessage+0x42c (FPO: [Non-Fpo])
0:007> g @$ra
eax=00000000 ebx=00000000 ecx=72ec5a19 edx=000004c2 esi=00a2efb0 edi=00000000
eip=014db166 esp=00a2ee64 ebp=00a2ee74 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
0x014db166
014db166 85c0 test eax,eax
0:007> !teb
TEB at 7ffdc000
ExceptionList: 00a2eee0
StackBase: 00a30000
StackLimit: 00a28000
SubSystemTib: 00000000
FiberData: 00001e00
ArbitraryUserPointer: 00000000
Self: 7ffdc000
EnvironmentPointer: 00000000
ClientId: 00002498 . 00002314
RpcHandle: 00000000
Tls Storage: 00000000
PEB Address: 7ffda000
LastErrorValue: 5
LastStatusValue: c0000022
Count Owned Locks: 0
HardErrorMode: 0
[解決方法2]
プリンタドライバの製造元へお問い合せください。
[原因3]
Citrix Universal Printer Driverが破損しているか、非公式に認証された(MS WHQL)プリンタドライバによって編集されています。
CTX102583 - Citrixユニバーサルプリンタドライバ(UPD)のトラブルシューティングと解説
[解決方法3]
1. [プログラムの追加と削除]の[変更と削除]機能を使用して、Citrix Universal Printer Driverを再インストールします。
2. すべての印刷ジョブ、プリンタ、プリンタドライバおよびスプールファイルをシステムから削除するには、Windows Server 2003 Resource Kit ToolsのSpooler Cleaner (Cleanspl.exe)を使用することをお勧めします。
3. Citrix Universal Printer Driverを再インストールします。
[関連情報]
この資料は米国のCitrix Knowledge Baseで提供している情報をもとに作成したものです。
Document ID: CTX107838
Event ID 1116 Printer autocreation failure. Reason: AddPrinter() failed with status 0x3EB