⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdc_events.c

📁 WinDriver目录下的源码
💻 C
字号:
/************************************************************************
*  File: wdc_events.c - Implementation of WDC Plug-and-Play and power   *
*        management events handling API                                 *
*                                                                       *
*  Copyright (c) 2005 Jungo Ltd.  http://www.jungo.com                  *
*************************************************************************/

#include "wdc_lib.h"
#include "wdc_defs.h"
#include "wdc_err.h"

DWORD DLLCALLCONV WDC_EventRegister(WDC_DEVICE_HANDLE hDev, DWORD dwActions,
    EVENT_HANDLER funcEventHandler, PVOID pData, BOOL fUseKP)
{
    DWORD dwStatus;
    PWDC_DEVICE pDev = (PWDC_DEVICE)hDev;

    if (!funcEventHandler || !WdcIsValidDevHandle(hDev))
    {
        WDC_Err("WDC_EventRegister: %s",
            !funcEventHandler ? "Error - NULL event handler callback function\n" : WdcGetLastErrStr());
        return WD_INVALID_PARAMETER;
    }

    if (!dwActions)
    {
        WDC_Err("WDC_EventRegister: Error - No events actions were set\n");
        return WD_INVALID_PARAMETER;
    }

    if (pDev->hEvent)
    {
        WDC_Err("WDC_EventRegister: Event already registered\n");
        return WD_OPERATION_ALREADY_DONE;
    }
    
    BZERO(pDev->Event);
    
    if (fUseKP)
    {
        if (!WDC_IS_KP(pDev))
        {
            WDC_Err("WDC_EventRegister: Error - Device does not use a Kernel PlugIn\n");
            return WD_INVALID_PARAMETER;
        }

        pDev->Event.hKernelPlugIn = WDC_GET_KP_HANDLE(pDev);
    }

    pDev->Event.dwAction = dwActions;
    pDev->Event.dwCardType = WDC_GetBusType(pDev);

    if (WD_BUS_PCI == WDC_GetBusType(pDev))
    {
        pDev->Event.u.Pci.cardId = pDev->id.pciId;
        pDev->Event.u.Pci.pciSlot = pDev->slot.pciSlot;
    }
    else
    {
        pDev->Event.u.Pcmcia.deviceId = pDev->id.pcmciaId;
        pDev->Event.u.Pcmcia.slot = pDev->slot.pcmciaSlot;
    }

    dwStatus = EventRegister(&pDev->hEvent, WDC_GetWDHandle(), &pDev->Event,
        funcEventHandler, pData);
    
    if (WD_STATUS_SUCCESS != dwStatus)
    {
        WDC_Err("WDC_EventRegister: Failed to register event.\n"
            "Error 0x%lx - %s\n", dwStatus, Stat2Str(dwStatus));

        pDev->hEvent = NULL;
        return dwStatus;
    }
    
    WDC_Trace("WDC_EventRegister: Events registered successfully "
            "(event handle: 0x%lx)\n", pDev->hEvent);

    return WD_STATUS_SUCCESS;
}

DWORD DLLCALLCONV WDC_EventUnregister(WDC_DEVICE_HANDLE hDev)
{
    DWORD dwStatus;
    PWDC_DEVICE pDev = (PWDC_DEVICE)hDev;

    if (!WdcIsValidDevHandle(hDev))
    {
        WDC_Err("WDC_EventUnregister: %s", WdcGetLastErrStr());
        return WD_INVALID_PARAMETER;
    }
        
    if (!pDev->hEvent)
    {
        WDC_Trace("WDC_EventUnregister: Events are not registered\n");
        return WD_OPERATION_ALREADY_DONE;
    }

    dwStatus = EventUnregister(pDev->hEvent);
    
    if (WD_STATUS_SUCCESS != dwStatus)
    {
        WDC_Err("WDC_EventUnregister: Failed to unregister events.\n"
            "Error 0x%lx - %s\n", dwStatus, Stat2Str(dwStatus));
    }
        
    pDev->hEvent = NULL;
    
    return dwStatus;
}

BOOL DLLCALLCONV WDC_EventIsRegistered(WDC_DEVICE_HANDLE hDev)
{
#if defined(DEBUG)
    if (!WdcIsValidDevHandle(hDev))
    {
        WDC_Err("WDC_EventIsRegistered: %s", WdcGetLastErrStr());
        return FALSE;
    }
#endif
    
    return (BOOL) ((PWDC_DEVICE)hDev)->hEvent;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -