AddPrinter 関数

AddPrinter 関数は、指定したサーバーでサポートされているプリンターの一覧にプリンターを追加します。

構文

HANDLE AddPrinter(
  _In_ LPTSTR *pName,
  _In_ DWORD  Level,
  _In_ LPBYTE pPrinter
);

パラメーター

pName [in]

プリンターをインストールするサーバーの名前を指定する null で終わる文字列へのポインター。 この文字列が NULL の場合、プリンターはローカルにインストールされます。

レベル [入力]

pPrinter が指す構造体のバージョン。 この値は 2 である必要があります。

pPrinter [in]

プリンターに関する情報を含む PRINTER_INFO_2 構造体へのポインター。 AddPrinter を呼び出す前に、この構造体の pPrinterNamepPortNamepDriverNameおよび pPrintProcessor メンバーに NULL 以外の値を指定する必要があります。

戻り値

関数が成功した場合、戻り値は新しいプリンター オブジェクトへのハンドル (スレッド セーフではありません) です。 ハンドルが完成したら、 ClosePrinter 関数に渡して閉じます。

関数が失敗した場合、戻り値は NULL です

注釈

DllMain では、このメソッドを呼び出さないでください。

注意

これはブロック関数または同期関数であり、すぐには返されない可能性があります。 この関数が返す速度は、ネットワーク状態、プリント サーバーの構成、プリンター ドライバーの実装要因など、アプリケーションの作成時に予測が困難な実行時の要因によって異なります。 ユーザー インターフェイスとの対話を管理するスレッドからこの関数を呼び出すと、アプリケーションが応答しなくなる可能性があります。

呼び出し元には SeLoadDriverPrivilege が必要です。

返されたハンドルはスレッド セーフではありません。 呼び出し元が複数のスレッドで同時に使用する必要がある場合は、 同期関数を使用してプリンター ハンドルへのカスタム同期アクセスを提供する必要があります。 カスタム コードの記述を避けるために、アプリケーションは必要に応じて各スレッドでプリンター ハンドルを開くことができます。

AddPrinter 関数を呼び出す前に設定できるPRINTER_INFO_2構造体のメンバーを次に示します。

  • 属性
  • pPrintProcessor
  • DefaultPriority
  • 優先順位
  • pComment
  • pSecurityDescriptor
  • pDatatype
  • pSepFile
  • pDevMode
  • pShareName
  • pLocation
  • StartTime
  • pParameters
  • UntilTime

PRINTER_INFO_2構造体の StatuscJobsAveragePPM メンバーは、GetPrinter 関数で使用するために予約されています。 AddPrinter を呼び出す前に設定しないでください。

pSecurityDescriptorNULL の場合、システムはプリンターに既定のセキュリティ記述子を割り当てます。 既定のセキュリティ記述子には、次のアクセス許可があります。

説明
Administrators と Power Users 印刷キューのフル コントロール。 つまり、これらのグループのメンバーは、キューの印刷、管理 (キューの削除、セキュリティ記述子を含むキューの設定の変更)、およびすべてのユーザーの印刷ジョブ (削除、一時停止、再開、再開ジョブ) を管理できます。Power Users は Windows XP Professional より前には存在しないことに注意してください。
作成者/所有者 独自のジョブを管理できます。 つまり、ジョブを送信するユーザーは、自分のジョブを管理 (削除、一時停止、再開、再開) できます。
Everyone 実行と標準の読み取り制御。 つまり、everyone グループのメンバーは、印刷キューのプロパティを印刷および読み取ることができます。

アプリケーションは 、AddPrinter 関数を使用してプリンター オブジェクトを作成した後、 PrinterProperties 関数を使用して、プリンター オブジェクトに関連付けられているプリンター ドライバーの正しい設定を指定する必要があります。

AddPrinter 関数は、同じ名前のプリンター オブジェクトが既に存在する場合、そのオブジェクトが削除保留中としてマークされていない限り、エラーを返します。 その場合、既存のプリンターは削除されず、 AddPrinter 作成パラメーターを使用して既存のプリンター設定を変更します (アプリケーションが SetPrinter 関数を使用した場合と同様)。

EnumPrintProcessors 関数を使用して、サーバーにインストールされている印刷プロセッサのセットを列挙します。 EnumPrintProcessorDatatypes 関数を使用して、印刷プロセッサがサポートするデータ型のセットを列挙します。 EnumPorts 関数を使用して、使用可能なポートのセットを列挙します。 EnumPrinterDrivers 関数を使用して、インストールされているプリンター ドライバーを列挙します。

AddPrinter 関数の呼び出し元は、プリンターを作成するサーバーにSERVER_ACCESS_ADMINISTERアクセスできる必要があります。 関数によって返されるハンドルにはPRINTER_ALL_ACCESSアクセス許可があり、プリンターで管理操作を実行するために使用できます。

DrvPrinterEvent 関数に PRINTER_EVENT_FLAG_NO_UI フラグが渡された場合、ドライバーは DrvPrinterEvent 中に UI 呼び出しを使用しないでください。 UI 関連のジョブを実行するには、インストーラーでプリンターの .inf ファイルの VendorSetup エントリを使用するか、プラグ アンド プレイデバイスの場合は、インストーラーでデバイス固有の共同インストーラーを使用する必要があります。 VendorSetup の詳細については、「Microsoft Windows Driver Development Kit (DDK)」を参照してください。

インターネット接続ファイアウォール (ICF) は既定でプリンター ポートをブロックしますが、 AddPrinter を実行すると、[ファイルと印刷の共有] の例外が有効になります。

要件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winspool.h (Windows.h を含む)
ライブラリ
Winspool.lib
[DLL]
Winspool.drv
Unicode 名と ANSI 名
AddPrinterW (Unicode) と AddPrinterA (ANSI)

関連項目

印刷

印刷スプーラー API 関数

ClosePrinter

DeletePrinter

EnumPorts

EnumPrinterDrivers

EnumPrintProcessors

EnumPrintProcessorDatatypes

GetPrinter

PRINTER_INFO_2

PrinterProperties

SetPrinter