UNIDRV_PRIVATE_DEVMODE 구조체(printoem.h)

UNIDRV_PRIVATE_DEVMODE 구조를 사용하면 Unidrv 플러그 인이 Unidrv DEVMODEW 구조의 프라이빗 부분 크기를 확인할 수 있습니다.

구문

typedef struct _UNIDRV_PRIVATE_DEVMODE {
  WORD wReserved[4];
  WORD wSize;
} UNIDRV_PRIVATE_DEVMODE, *PUNIDRV_PRIVATE_DEVMODE;

멤버

wReserved[4]

시스템에서 사용하도록 예약되었습니다.

wSize

Unidrv DEVMODEW 구조체의 프라이빗 부분 크기(바이트)입니다.

설명

DEVMODEW 구조의 퍼블릭 및 프라이빗 섹션에 대한 자세한 내용은 DEVMODEW를 참조하세요.

Printoem.h 는 Unidrv DEVMODEW 구조체의 프라이빗 부분 크기를 결정하는 매크로를 정의합니다.

#define GET_UNIDRV_PRIVATE_DEVMODE_SIZE(pdm)\
    ( ( (pdm)->dmDriverExtra > (FIELD_OFFSET(UNIDRV_PRIVATE_DEVMODE, wSize) + sizeof(WORD)) ) ? \
    ((PUNIDRV_PRIVATE_DEVMODE)((PBYTE)(pdm) + (pdm)-> dmSize)) -> wSize : 0 )

GET_UNIDRV_PRIVATE_DEVMODE_SIZE 매크로의 pdm 인수는 DEVMODEW 구조체에 대한 포인터입니다. 매크로는 DEVMODEW 구조체의 dmDriverExtra 멤버 값이 UNIDRV_PRIVATE_DEVMODE 구조체의 wSize 멤버의 바이트 오프셋보다 큰지 여부를 결정합니다. 이 경우 매크로는 UNIDRV_PRIVATE_DEVMODE 구조체에서 wSize 멤버의 값을 반환합니다. 그렇지 않은 경우 매크로는 0을 반환합니다.

플러그 인 DEVMODEW 구조의 프라이빗 부분 주소를 안전하게 확인하려면 다음을 수행합니다.

  1. 호출에서 DEVMODEW 구조체의 주소를 전달하여 GET_UNIDRV_PRIVATE_DEVMODE_SIZE 매크로를 호출합니다.

  2. (pdm)->dmDriverExtra가 매크로에서 반환된 값보다 큰지 확인합니다. (매크로는 UNIDRV_PRIVATE_DEVMODE 구조체의 wSize 멤버 값을 반환합니다.)

  3. 다음과 같이 플러그 인 DEVMODEW 구조의 프라이빗 부분 주소를 결정합니다.

    pdmPlugin = (PBYTE)(pdm) + (pdm)->dmSize + wSize;
    

    앞의 예제는 퍼블릭 DEVMODEW 구조체(pdm)의 주소로 시작하고, 이 구조체의 바이트 수(pdm-dmSize>)를 추가한 다음, Unidrv 프라이빗 DEVMODEW 구조체(wSize)의 크기(바이트)를 추가합니다. 플러그 인의 프라이빗 DEVMODEW 데이터는 이 메모리 주소에서 시작됩니다. 여러 플러그 인이 함께 연결된 경우 이 예제에서 반환되는 주소는 첫 번째 플러그 인의 프라이빗 DEVMODEW 데이터의 주소입니다. 두 번째 플러그 인의 프라이빗 DEVMODEW 데이터는 첫 번째 플러그 인의 프라이빗 DEVMODEW 데이터를 따르며, 세 번째 플러그 인의 프라이빗 DEVMODEW 데이터는 두 번째 플러그 인의 프라이빗 DEVMODEW 데이터 등을 따릅니다. n번째 플러그 인의 프라이빗 DEVMODEW 데이터의 주소를 확인해야 하는 플러그 인 개발자는 첫 번째 n-1 플러그 인에 대한 프라이빗 DEVMODEW 데이터의 크기를 알고 있어야 합니다.

  4. 플러그 인 DEVMODEW 구조의 프라이빗 부분이 유효한 OEM_DMEXTRAHEADER 구조로 시작하는지 확인합니다.

요구 사항

요구 사항
헤더 printoem.h(Printoem.h 포함)

추가 정보

PSCRIPT5_PRIVATE_DEVMODE