скрытое меню

добавляем нужные интерфейсы - получаем нужный функционал

В помощь C:\WinDDK\7600.16385.1\inc\wdf\umdf\1.9\wudfddi.h - здесь все интерфейсы описываются. Допустим запрашивает система интерфейс F9D48F27-BDBE-4A96-AF96-0E53E2A436EC (вход через HRESULT CMyDevice::QueryInterface( __in REFIID InterfaceId, __out PVOID *Object)) - google вообще не поможет. В в wudfddi.h можно найти :

    MIDL_INTERFACE("F9D48F27-BDBE-4A96-AF96-0E53E2A436EC")
    IPnpCallbackRemoteInterfaceNotification : public IUnknown
    {
    public:
        virtual void STDMETHODCALLTYPE OnRemoteInterfaceArrival( 
            /* [annotation][in] */ 
            __in  IWDFRemoteInterfaceInitialize *pWdfRemoteInterfaceInit) = 0;
        
    };

Допустим надо оттрасировать событие очереди драйвера и удаления

Что для этого надо - знание функции "объекта обратного вызова" при создании драйвера. IQueueCallbackCreate ! - это интерфейс, что мы знаем о нем ? В нашем примере он не вызывается иначе трассировщик нам бы показал.

MS пишет : A driver registers the IQueueCallbackCreate interface when it calls the IWDFDevice::CreateIoQueue

Процесс такой:
1.

class CMyQueue : 
    public IQueueCallbackDeviceIoControl,
    public IQueueCallbackRead,
    public IQueueCallbackWrite,
    public IQueueCallbackCreate,
    public CUnknown


2.

virtual VOID STDMETHODCALLTYPE OnWrite( __in IWDFIoQueue *pWdfQueue, __in IWDFIoRequest *pWdfRequest, __in SIZE_T NumOfBytesToWrite );
virtual VOID STDMETHODCALLTYPE OnRead( __in IWDFIoQueue *pWdfQueue,  __in IWDFIoRequest *pWdfRequest, __in SIZE_T NumOfBytesToRead);
virtual VOID STDMETHODCALLTYPE OnCreateFile( __in IWDFIoQueue *pWdfQueue,  __in IWDFIoRequest *pWdfRequest,__in IWDFFile* pWdfFileObjec);


3.

IQueueCallbackCreate * CMyQueue::QueryIQueueCallbackCreate(VOID)
{
	AddRef();
	Trace(TRACE_LEVEL_ERROR,L"%s CMyQueue::QueryIQueueCallbackCreate",s);
	
	return static_cast(this);
}


4.

else if (IsEqualIID(InterfaceId, __uuidof(IQueueCallbackCreate))) 
{
	Trace(TRACE_LEVEL_INFORMATION,L"%s CMyQueue::QueryInterface IQueueCallbackCreate",s);		
        *Object = QueryIQueueCallbackCreate();
        hr = S_OK;
}

5.

VOID STDMETHODCALLTYPE CMyQueue::OnCreateFile(__in IWDFIoQueue* pWdfQueue, __in IWDFIoRequest* pWdfRequest, __in IWDFFile* pFileObject)
{
	HRESULT hr = S_OK;	
	UNREFERENCED_PARAMETER(pWdfQueue);
	
	Lock();
	
	Trace(TRACE_LEVEL_INFORMATION,L"%s CMyQueue::OnCreateFile ",s);	
	IWDFIoQueue* pWdfQueue1=pWdfQueue;
	IWDFIoRequest* pWdfRequestt1=pWdfRequest;
	IWDFFile* pFileObject1=pFileObject;
	if(pWdfQueue1==0)
	{
	}
	if(pWdfRequestt1==0)
	{
	}
	if(pFileObject1==0)
	{
	}

	pWdfRequest->Complete(hr);
	Unlock();
	return;	
}

Таким же образом добавляем :

IFileCallbackCleanup и IFileCallbackClose

Яндекс.Метрика