в помощь 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