AddPrinter関数によりプリンタを追加したときに、アクセス権の無いユーザーに対してプリンタが一時的に表示される可能性について

Last Update: feedback 共有

こんにちは、Japan Developer Support Core チームです。

今回は AddPrinter 関数によりプリンタを追加したときに、アクセス権の無いユーザーに対してプリンタが一時的に表示される可能性についてご案内いたします。
AddPrinter関数は、パラメータの1つである PRINTER_INFO2構造体のpSecurityDescripterメンバ変数に、プリンタを利用するユーザーのアクセス権を指定することができます。
通常、アクセス権の無いユーザーがログインしてもプリンタが表示されることはありませんが、以下の手順においてプリンタが表示されることがあります。

- 再現手順
 1. ユーザーA、ユーザーBで、同一のリモートデスクトップサーバーにリモートデスクトップ接続します。
 2. ユーザーAでメモ帳などのアプリを起動し、印刷ダイアログを表示します。
 3. ユーザーBで AddPrinter関数によりプリンタを追加します。
このとき、pSecurityDescripter メンバ変数に設定するセキュリティ情報には、ユーザーAを含めず、ユーザーAがプリンタを利用できないように設定します。

上記手順を実行すると、ユーザーAの印刷ダイアログに、手順3で作成されたプリンタが表示されます。
条件としては、手順2で事前に印刷ダイアログが表示されている必要がありますので、ユーザーAの操作と、AddPrinter関数の実行タイミングによって発生することとなります。
なお、プリンタが表示される現象は一時的なもので、印刷ダイアログで F5キーにより更新を行った場合や、印刷ダイアログを一度閉じた後は、プリンタは表示されなくなります。
また、該当のプリンタに印刷を行ったとしても、アクセスは拒否されますので印刷はされません。

- 参考情報
AddPrinter function
https://learn.microsoft.com/en-us/windows/win32/printdocs/addprinter
SECURITY_DESCRIPTOR structure (winnt.h)
https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor


本ブログの内容は弊社の公式見解として保証されるものではなく、開発・運用時の参考情報としてご活用いただくことを目的としています。もし公式な見解が必要な場合は、弊社ドキュメント (https://docs.microsoft.comhttps://support.microsoft.com) をご参照いただくか、もしくは私共サポートまでお問い合わせください。