drvEnablePDEV 函数 (winddi.h)

DrvEnablePDEV 函数将物理设备特征的说明返回到 GDI。

语法

DHPDEV DrvEnablePDEV(
  [in]           DEVMODEW *pdm,
  [in]           LPWSTR   pwszLogAddress,
                 ULONG    cPat,
  [in, optional] HSURF    *phsurfPatterns,
                 ULONG    cjCaps,
  [out]          ULONG    *pdevcaps,
                 ULONG    cjDevInfo,
  [out]          DEVINFO  *pdi,
                 HDEV     hdev,
  [in]           LPWSTR   pwszDeviceName,
                 HANDLE   hDriver
);

参数

[in] pdm

指向包含驱动程序数据的 DEVMODEW 结构的指针。

对于支持 Windows NT 4.0 的驱动程序,当 GDI 调用具有以下 DEVMODEW 成员的 GDI 时,DrvEnablePDEV 应返回硬件的默认模式:dmBitsPerPeldmPelsWidthdmPelsHeightdmDisplayFrequency

[in] pwszLogAddress

对于打印机驱动程序,请指向逻辑地址字符串,该字符串是驱动程序写入位置的用户名称。 示例包括“LPT1”或“我的打印机”。

显示驱动程序应忽略此参数。

cPat

对于打印机驱动程序,指定 phsurfPatterns 指向的缓冲区中的图面手柄数。 驱动程序无法访问缓冲区末尾之外的内存。

显示驱动程序应忽略此参数。

[in, optional] phsurfPatterns

显示驱动程序应忽略此参数。

对于打印机驱动程序,指向驱动程序将使用表示标准填充图案的表面手柄的缓冲区。 必须按顺序定义以下模式:

模式 说明
HS_HORIZONTAL 水平阴影。
HS_VERTICAL 垂直阴影。
HS_FDIAGONAL 45 度的向上舱口 (从左到右) 。
HS_BDIAGONAL 45 度的向下阴影 (从左到右) 。
HS_CROSS 水平和垂直交叉口。
HS_DIAGCROSS 45 度交叉线。
 
注意 在早期版本的驱动程序开发工具包 (DDK) 中减少了需要驱动程序支持的默认阴影模式的数量。 因此,驱动程序通常用来声明模式数组大小的HS_DDI_MAX会减少。
 
GDI 使用其中一个图面调用 DrvRealizeBrush ,以实现具有标准模式的画笔。

其中每个表面必须是光栅设备的单色 (每像素 1 位) GDI 位图。 设备驱动程序应选择在设备图面上写入时最类似于标准模式的模式。

对于向量设备,从不需要 GDI 在支持例程中使用这些画笔。 因此,表面可以是 DrvRealizeBrush 识别为标准模式的设备支持表面。

cjCaps

指定 pdevcaps 指向的缓冲区的大小。 驱动程序不能访问缓冲区末尾之外的内存。

[out] pdevcaps

指向将用于描述设备功能的 GDIINFO 结构的指针。 GDI 从零初始化调用 DrvEnablePDEV 的此结构。

cjDevInfo

指定 Pdi 指向的 DEVINFO 结构中的字节数。 驱动程序应在 DEVINFO 中修改不超过此字节数。

[out] pdi

指向 DEVINFO 结构的指针,该结构描述驱动程序和物理设备。 驱动程序应仅更改它理解的成员。 GDI 在调用 DrvEnablePDEV 之前用零填充此结构。

hdev

向设备提供 GDI 的句柄。 此句柄必须用作某些 GDI 回调的输入,例如 EngGetDriverName

[in] pwszDeviceName

指向作为设备用户可读名称的 null 终止字符串的指针。

hDriver

输出设备的句柄。 对于显示驱动程序,这是显示设备句柄。 对于打印机驱动程序,此参数应用作对打印机的句柄,以调用后台处理程序。

返回值

返回值是 PDEV 的句柄,用于标识启用的设备(如果函数成功)。 也就是说, DrvEnablePDEV 会在成功时返回专用驱动程序定义的设备实例信息的句柄。 否则,它将返回 NULL

注解

图形设备驱动程序可能支持附加到不同逻辑地址的多个物理设备。 驱动程序还必须支持同时使用不同的绘图图面。

DrvEnablePDEV 的用途如下:

  1. 通知 GDI 设备的物理特征。
  2. 创建一个专用 PDEV 结构,该结构描述当前设备实例 (,具体取决于收到的 DEVMODE 结构和设备名称) 。
当 GDI 随后调用其他图形 DDI 函数时,它将 DrvEnablePDEV 返回的句柄作为输入 (通常在 SURFOBJ 结构中) ,以便驱动程序能够标识设备实例。

单个逻辑设备可以管理多个 PDE,这些 PDE 可通过以下各项进行区分:

  1. 硬件类型 - 单个设备驱动程序可能支持“LaserWhiz”、“LaserWhiz II”和“LaserWhiz Super”。
  2. 逻辑地址 -- 单个设备驱动程序可以支持附加到“LPT1”、“COM2”、“\SERVER1\PSLAZER”等的打印机。 可以同时支持多个 VGA 显示器的显示驱动程序可能会根据端口号区分它们;例如,0x3CE或0x2CE。
  3. 图面 - 打印机驱动程序可以同时处理两个打印作业。 这两个图面表示将打印的两页。 同样,显示设备驱动程序可能支持同一设备上的两个桌面。
收到对此函数的调用时,驱动程序必须分配内存以支持 PDEV。 但是,在 GDI 调用 DrvEnableSurface 之前,不需要支持实际表面。

如果设备图面需要分配位图,则无需在需要之前进行这些分配。 尽管应用程序通常会在实际写入设备之前请求设备信息,但等待分配资源(如大型位图)可以节省内存。

GDI 从零初始化 phsurfPatterns 指向的缓冲区,然后再调用此函数。

图形驱动程序需要 DrvEnablePDEV

要求

   
目标平台 台式机
标头 winddi.h (包括 Winddi.h)

请参阅

DEVINFO

DEVMODEW

DrvEnableSurface

DrvRealizeBrush

EngCreatePalette

GDIINFO