EngDeleteDriverObj 함수(winddi.h)
EngDeleteDriverObj 함수는 디바이스 관리 리소스를 추적하는 데 사용되는 핸들을 해제합니다.
구문
ENGAPI BOOL EngDeleteDriverObj(
HDRVOBJ hdo,
BOOL bCallBack,
BOOL bLocked
);
매개 변수
hdo
삭제할 드라이버 개체에 대한 핸들입니다. 이 GDI 핸들은 EngCreateDriverObj에서 가져옵니다.
bCallBack
정리 콜백을 호출할지 여부를 지정합니다. TRUE이면 GDI는 핸들 관리자에서 DRIVEROBJ를 제거하기 전에 정리 콜백을 호출합니다. FALSE인 경우 GDI는 그렇게 하지 않습니다. 콜백 함수가 오류를 반환하면 EngDeleteDriverObj 가 실패합니다.
bLocked
EngDeleteDriverObj가 호출되기 전에 드라이버가 개체를 잠갔는지 여부를 지정합니다(EngLockDriverObj 호출을 통해). TRUE이면 개체가 잠겼습니다. FALSE이면 개체가 잠기지 않았습니다.
반환 값
함수가 성공하고 핸들이 해제된 경우 반환 값은 TRUE 입니다. 핸들이 해제되지 않은 경우 FALSE 입니다. EngCreateDriverObj에 지정된 pFreeObjProc 드라이버 함수가 FALSE를 반환하면 EngDeleteDriverObj가 실패하고 핸들이 해제되지 않습니다. 이는 정리 콜백이 다른 DRIVEROBJ 구조체를 잠그고(현재 DRIVEROBJ 구조를 해제하기 위해) 다른 DRIVEROBJ 구조체가 다른 스레드에서 사용 중이므로 실패하는 경우에 발생할 수 있습니다.
설명
핸들이 해제된 후 연결된 드라이버 리소스는 더 이상 GDI에 의해 추적되지 않으며 EngCreateDriverObj 의 pFreeObjProc 매개 변수가 가리키는 함수는 프로세스 종료 시 호출되지 않습니다. 리소스가 해제되도록 하는 것은 드라이버의 책임입니다.
대부분의 드라이버는 종료 시 개체를 정리하는 방법에 일관성이 있어야 합니다. 따라서 이 드라이버 리소스를 해제하려면 드라이버의 정리 함수를 호출해야 함을 GDI에 나타내는 bCallback에 대해 TRUE를 전달합니다.
bCallBack 매개 변수는 콜백 함수를 호출해야 하는지 여부를 GDI에 나타냅니다. bCallBack에 TRUE를 전달하면 GDI가 드라이버의 정리 함수를 다시 호출하여 이 드라이버 리소스를 해제하도록 지시합니다. FALSE를 전달하면 GDI가 정리 함수를 호출할 수 없습니다. pFreeObjProc이 FALSE를 반환하면 EngDeleteDriverObj가 실패하고 핸들이 해제되지 않습니다. 예를 들어 pFreeObjProc 이 현재 DRIVEROBJ 구조를 해제하기 위해 다른 DRIVEROBJ 구조를 잠가야 했고 구조체가 다른 스레드에서 사용 중이었기 때문에 실패한 경우에 발생할 수 있습니다. 정리 스레드 이외의 스레드가 실행되고 있지 않으므로 다른 개체의 잠금이 실패하지 않으므로 pFreeObjProc 은 정리 시 실패하지 않아야 합니다.
bLocked 매개 변수는 GDI에 드라이버가 개체를 이미 한 번 잠갔다는 것을 나타냅니다. 종종 개체를 삭제하기 전에 드라이버가 먼저 사용하도록 잠갔을 수 있습니다. 이렇게 하면 드라이버가 먼저 개체의 잠금을 해제하지 않고도 GDI를 호출할 수 있으므로 핸들이 해제되기 전에 다른 스레드가 드라이버에 들어가서 잠글 수 있습니다.
요구 사항
지원되는 최소 클라이언트 | Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | winddi.h(Winddi.h 포함) |
라이브러리 | Win32k.lib |
DLL | Win32k.sys |