www.pudn.com > WDM_PnPEvent.rar > OpenByIntf.cpp


#include "stdafx.h" 
#include "Test_PnPEvent.h" 
#include "Test_PnPEventDlg.h" 
 
// OpenByIntf.cpp - open device by device interface 
// Copyright (c) 1998 Compuware Corporation 
#define NOCRYPT			// prevent attempt to include missing files 
#define _INC_EXCPT		// prevent excpt.h from being included 
 
#include 	// DriverWorks 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
// OpenByInterface 
// 
HANDLE OpenByInterface( 
		GUID* pClassGuid,	// points to the GUID that identifies the interface class 
		DWORD instance,		// specifies which instance of the enumerated devices to open 
		PDWORD pError		// address of variable to receive error status 
		) 
{ 
	HANDLE hDev; 
	CDeviceInterfaceClass DevClass(pClassGuid, pError); 
 
	if (*pError != ERROR_SUCCESS) 
		return INVALID_HANDLE_VALUE; 
 
	CDeviceInterface DevInterface(&DevClass, instance, pError); 
 
	if (*pError != ERROR_SUCCESS) 
		return INVALID_HANDLE_VALUE; 
 
	hDev = CreateFile( 
		DevInterface.DevicePath(), 
		GENERIC_READ | GENERIC_WRITE, 
		FILE_SHARE_READ | FILE_SHARE_WRITE, 
		NULL, 
		OPEN_EXISTING, 
		FILE_ATTRIBUTE_NORMAL, 
		NULL 
		); 
 
	if (hDev == INVALID_HANDLE_VALUE) 
		*pError = GetLastError(); 
	else  
	{ 
		CString msg; 
		CTest_PnPEventDlg* pDlg=(CTest_PnPEventDlg*)AfxGetMainWnd(); 
		msg.Format("Device %s arrived", (LPCTSTR) DevInterface.DevicePath()); 
		pDlg->m_Events.AddString(msg); 
	} 
 
	return hDev; 
}