亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adapter.cpp

?? 微軟提供的實現mpu-401音頻設備的標準功能的wdm驅動例程。
?? CPP
字號:
/*****************************************************************************
 * adapter.cpp - MPU401 adapter driver implementation.
 *****************************************************************************
 * Copyright (c) 1997-1999 Microsoft Corporation.  All rights reserved.
 *
 * Created 6/19/97, a-seemap
 *
 */

//
// All the GUIDS for all the miniports end up in this object.
//
#define PUT_GUIDS_HERE

#define STR_MODULENAME "MPU401Adapter: "
#define PC_NEW_NAMES 1

#define kUseDMusicMiniport 1

#include "portcls.h"
#include "ksdebug.h"

#if (kUseDMusicMiniport)
#include "dmusicks.h"
#endif  //  kUseDMusicMiniport

/*****************************************************************************
 * Defines
 */

#define MAX_MINIPORTS 1

#if (DBG)
#define SUCCEEDS(s) ASSERT(NT_SUCCESS(s))
#else
#define SUCCEEDS(s) (s)
#endif

/*****************************************************************************
 * Referenced forward
 */
extern "C"
NTSTATUS
AddDevice
(
        IN PVOID        Context1,
        IN PVOID        Context2
);

NTSTATUS
StartDevice
(
    IN      PDEVICE_OBJECT  pDeviceObject,  // Context for the class driver.
    IN      PIRP            pIrp,           // Context for the class driver.
    IN      PRESOURCELIST   ResourceList    // List of hardware resources.
);


#pragma code_seg("INIT")
/*****************************************************************************
 * DriverEntry()
 *****************************************************************************
 * This function is called by the operating system when the driver is loaded.
 * All adapter drivers can use this code without change.
 */
extern "C"
NTSTATUS
DriverEntry
(
    IN      PVOID   Context1,   // Context for the class driver.
    IN      PVOID   Context2    // Context for the class driver.
)
{
    PAGED_CODE();
    _DbgPrintF(DEBUGLVL_VERBOSE, ("DriverEntry"));
//    _DbgPrintF(DEBUGLVL_ERROR, ("Starting breakpoint for debugging"));

    //
    // Tell the class driver to initialize the driver.
    //
    return PcInitializeAdapterDriver((PDRIVER_OBJECT)Context1,
                                     (PUNICODE_STRING)Context2,
                                     (PDRIVER_ADD_DEVICE)AddDevice);
}

#pragma code_seg("PAGE")
/*****************************************************************************
 * AddDevice()
 *****************************************************************************
 * This function is called by the operating system when the device is added.
 * All adapter drivers can use this code without change.
 */
NTSTATUS
AddDevice
(
    IN      PVOID   Context1,   // Context for the class driver.
    IN      PVOID   Context2    // Context for the class driver.
)
{
    PAGED_CODE();
    _DbgPrintF(DEBUGLVL_VERBOSE, ("AddDevice"));

    //
    // Tell the class driver to add the device.
    //
    return PcAddAdapterDevice((PDRIVER_OBJECT)Context1,(PDEVICE_OBJECT)Context2,StartDevice,MAX_MINIPORTS,0);
}

#pragma code_seg("PAGE")
/*****************************************************************************
 * InstallSubdevice()
 *****************************************************************************
 * This function creates and registers a subdevice consisting of a port
 * driver, a minport driver and a set of resources bound together.  It will
 * also optionally place a pointer to an interface on the port driver in a
 * specified location before initializing the port driver.  This is done so
 * that a common ISR can have access to the port driver during initialization,
 * when the ISR might fire.
 */
NTSTATUS
InstallSubdevice
(
    IN      PVOID               Context1,
    IN      PVOID               Context2,
    IN      PWCHAR              Name,
    IN      REFGUID             PortClassId,
    IN      REFGUID             MiniportClassId,
    IN      PUNKNOWN            UnknownAdapter      OPTIONAL,   //not used - null
    IN      PRESOURCELIST       ResourceList,                   //not optional, but can be EMPTY!
    IN      REFGUID             PortInterfaceId,
    OUT     PUNKNOWN *          OutPortInterface,   OPTIONAL    //not used - null
    OUT     PUNKNOWN *          OutPortUnknown      OPTIONAL    //not used - null
)
{
    PAGED_CODE();
    _DbgPrintF(DEBUGLVL_VERBOSE, ("InstallSubdevice"));

    ASSERT(Context1);
    ASSERT(Context2);
    ASSERT(Name);
    ASSERT(ResourceList);

    //
    // Create the port driver object
    //
    PPORT       port;
    NTSTATUS    ntStatus = PcNewPort(&port,PortClassId);

    if (NT_SUCCESS(ntStatus))
    {
        //
        // Deposit the port somewhere if it's needed.
        //
        if (OutPortInterface)
        {
            //
            //  Failure here doesn't cause the entire routine to fail.
            //
            (void) port->QueryInterface
            (
                PortInterfaceId,
                (PVOID *) OutPortInterface
            );
        }

        PMINIPORT miniport;
        //
        // Create the miniport object
        //
        ntStatus = PcNewMiniport(&miniport,MiniportClassId);

        if (NT_SUCCESS(ntStatus))
        {
            //
            // Init the port driver and miniport in one go.
            //
            ntStatus = port->Init( (PDEVICE_OBJECT)Context1,
                                   (PIRP)Context2,
                                   miniport,
                                   NULL,   // interruptsync created in miniport.
                                   ResourceList);

            if (NT_SUCCESS(ntStatus))
            {
                //
                // Register the subdevice (port/miniport combination).
                //
                ntStatus = PcRegisterSubdevice( (PDEVICE_OBJECT)Context1,
                                                Name,
                                                port    );
#if DBG
                if (!(NT_SUCCESS(ntStatus)))
                {
                    _DbgPrintF(DEBUGLVL_TERSE, ("StartDevice: PcRegisterSubdevice failed"));
                }
#endif
            }
            else
            {
                _DbgPrintF(DEBUGLVL_TERSE, ("InstallSubdevice: port->Init failed"));
            }

            //
            // We don't need the miniport any more.  Either the port has it,
            // or we've failed, and it should be deleted.
            //
            miniport->Release();
        }
        else
        {
            _DbgPrintF(DEBUGLVL_TERSE, ("InstallSubdevice: PcNewMiniport failed"));
        }

        if (NT_SUCCESS(ntStatus))
        {
            //
            // Deposit the port as an unknown if it's needed.
            //
            if (OutPortUnknown)
            {
                //
                //  Failure here doesn't cause the entire routine to fail.
                //
                (void) port->QueryInterface
                (
                    IID_IUnknown,
                    (PVOID *) OutPortUnknown
                );
            }
        }
        else
        {
            //
            // Retract previously delivered port interface.
            //
            if (OutPortInterface && (*OutPortInterface))
            {
                (*OutPortInterface)->Release();
                *OutPortInterface = NULL;
            }
        }

        //
        // Release the reference which existed when PcNewPort() gave us the
        // pointer in the first place.  This is the right thing to do
        // regardless of the outcome.
        //
        port->Release();
    }
    else
    {
        _DbgPrintF(DEBUGLVL_TERSE, ("InstallSubdevice: PcNewPort failed"));
    }

    return ntStatus;
}

#pragma code_seg("PAGE")
/*****************************************************************************
 * StartDevice()
 *****************************************************************************
 * This function is called by the operating system when the device is started.
 * It is responsible for starting the miniport. 
 * This code is specific to the adapter because it calls out miniports for  
 * functions that are specific to the adapter.
 */
NTSTATUS
StartDevice
(
    IN      PDEVICE_OBJECT  pDeviceObject,  // Context for the class driver.
    IN      PIRP            pIrp,           // Context for the class driver.
    IN      PRESOURCELIST   ResourceList    // List of hardware resources.
)
{
    PAGED_CODE();

    ASSERT(pDeviceObject);
    ASSERT(pIrp);
    ASSERT(ResourceList);
    if (!ResourceList)
    {
        _DbgPrintF(DEBUGLVL_TERSE, ("StartDevice: NULL resource list"));
        return STATUS_INVALID_PARAMETER;
    }

    NTSTATUS ntStatus = STATUS_INSUFFICIENT_RESOURCES;
    
    if (ResourceList->NumberOfEntries())
    {
#if (kUseDMusicMiniport)
        //
        // Start the UART miniport.
        //
        ntStatus = InstallSubdevice(
                                    pDeviceObject,
                                    pIrp,
                                    L"Uart",
                                    CLSID_PortDMus,
                                    CLSID_MiniportDriverDMusUART,
                                    NULL,
                                    ResourceList,
                                    IID_IPortDMus,
                                    NULL,
                                    NULL    // Not physically connected to anything.
                                    );
#else   //  (kUseDMusicMiniport)
        //
        // Start the UART miniport.
        //
        ntStatus = InstallSubdevice(
                                    pDeviceObject,
                                    pIrp,
                                    L"Uart",
                                    CLSID_PortMidi,
                                    CLSID_MiniportDriverUart,
                                    NULL,
                                    ResourceList,
                                    IID_IPortMidi,
                                    NULL,
                                    NULL    // Not physically connected to anything.
                                    );
#endif  //  (kUseDMusicMiniport)
    }
    else
    {
        _DbgPrintF(DEBUGLVL_TERSE, ("StartDevice: no entries in resource list"));
    }
    return ntStatus;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色婷婷亚洲99精品小说| 亚洲免费在线电影| 日韩精品专区在线影院观看| 538prom精品视频线放| 精品美女在线观看| 中文字幕在线不卡| 日韩电影免费一区| 国产不卡免费视频| 91久久国产综合久久| 欧美一个色资源| 一区二区理论电影在线观看| 秋霞影院一区二区| 国产自产高清不卡| 91亚洲午夜精品久久久久久| 91国产免费看| 国产日产欧美一区二区视频| 亚洲成人av一区| 成人免费视频视频在线观看免费| 欧美天堂一区二区三区| 国产日韩欧美电影| 日韩综合在线视频| 99视频一区二区| 久久伊99综合婷婷久久伊| 1区2区3区国产精品| 一区二区高清在线| 亚洲综合另类小说| 成人自拍视频在线观看| 在线综合+亚洲+欧美中文字幕| 中文字幕中文字幕中文字幕亚洲无线| 亚洲成av人片一区二区梦乃| 972aa.com艺术欧美| 国产精品日韩精品欧美在线 | 99国产欧美久久久精品| 91视频精品在这里| 精品第一国产综合精品aⅴ| 一卡二卡三卡日韩欧美| av资源站一区| 国产亚洲欧美日韩俺去了| 日本中文在线一区| 欧美一a一片一级一片| 国产色产综合色产在线视频| 久久精品二区亚洲w码| 在线成人高清不卡| 亚洲成人一区在线| 在线观看av一区| 又紧又大又爽精品一区二区| 欧美亚洲图片小说| 亚洲综合免费观看高清完整版在线 | 综合电影一区二区三区 | 91香蕉国产在线观看软件| 久久久99久久| 国产精品自拍毛片| 亚洲精品一区二区三区蜜桃下载| 亚洲一二三四久久| 欧美性做爰猛烈叫床潮| 亚洲一区二区在线观看视频| 91麻豆国产在线观看| 亚洲欧美国产毛片在线| 99国产精品久久久久久久久久 | 欧美美女直播网站| 日韩一区欧美二区| 欧美一区二区三区在线| 蜜臀av国产精品久久久久| 欧美一激情一区二区三区| 免费观看91视频大全| 国产精品综合网| 国产欧美一二三区| 99热这里都是精品| 一区二区三区免费看视频| 欧美亚洲综合久久| 一区二区三区在线观看视频| 欧美美女bb生活片| 日韩精品国产欧美| 精品日产卡一卡二卡麻豆| 国产一区二区美女诱惑| 国产精品美女久久久久久久久久久 | 亚洲丰满少妇videoshd| 日韩一区二区三区视频在线 | 亚洲欧美乱综合| 欧美男同性恋视频网站| 久久国产精品露脸对白| 国产日产欧产精品推荐色| 91啪在线观看| 日本中文在线一区| 中文字幕精品一区| 欧美日韩一区二区电影| 精品一区二区在线视频| www国产成人免费观看视频 深夜成人网| 国产福利91精品一区二区三区| 中文字幕一区二区5566日韩| 欧美日韩aaaaaa| 黑人巨大精品欧美一区| 亚洲一级二级三级在线免费观看| 制服丝袜一区二区三区| 成人禁用看黄a在线| 天天色天天操综合| 日韩女优制服丝袜电影| 懂色av中文字幕一区二区三区 | 日韩一区二区三| 一本色道**综合亚洲精品蜜桃冫| 亚洲精品国产第一综合99久久| 日韩丝袜情趣美女图片| 99精品视频一区二区三区| 日本亚洲视频在线| 亚洲视频图片小说| 精品久久久久久无| 欧美性xxxxxxxx| 丰满少妇久久久久久久| 美腿丝袜在线亚洲一区| 一区二区在线观看av| 亚洲国产成人私人影院tom| 欧美日本在线播放| 欧美午夜一区二区三区 | 久久综合九色综合97_久久久| 在线观看日韩国产| 91在线一区二区三区| 国产精品白丝jk黑袜喷水| 免播放器亚洲一区| 亚洲第一二三四区| 亚洲精品高清在线观看| 国产精品国产三级国产aⅴ中文 | 亚洲国产精品久久人人爱| 欧美激情在线一区二区| 日韩欧美一区二区久久婷婷| 制服丝袜日韩国产| 欧美日韩一区在线| 欧美日韩第一区日日骚| 欧美日韩视频第一区| 国产精品99久久久久久似苏梦涵| 午夜日韩在线电影| 亚洲一区影音先锋| 麻豆国产精品777777在线| 久久精品国产网站| 另类人妖一区二区av| 久久国产精品99精品国产| 日本aⅴ免费视频一区二区三区 | 99re6这里只有精品视频在线观看| 国产毛片精品视频| 国产福利一区二区三区在线视频| 国产麻豆精品视频| 国产很黄免费观看久久| 国产精品一区二区久久精品爱涩| 狠狠色伊人亚洲综合成人| 精品一区二区三区视频在线观看 | 亚洲韩国精品一区| 一区二区三区在线看| 一区二区三区在线视频免费| 国产一区美女在线| 亚洲精品大片www| 日韩高清不卡一区| 国产精品一区二区久久不卡| 99精品视频一区| 欧美日韩成人综合| 亚洲国产岛国毛片在线| 亚洲一区二区三区爽爽爽爽爽| 久久99国产乱子伦精品免费| 波多野结衣91| 欧美一二三四区在线| 国产精品伦一区二区三级视频| 亚洲一区在线观看视频| 国产成人在线色| 欧美午夜精品免费| 国产网站一区二区| 午夜激情一区二区| 国产宾馆实践打屁股91| 欧美午夜在线观看| 国产精品乱人伦| 麻豆国产精品一区二区三区| 一本一本大道香蕉久在线精品| 精品理论电影在线| 亚洲尤物视频在线| 不卡一区在线观看| 精品毛片乱码1区2区3区| 亚洲国产精品久久久久婷婷884| 国产毛片精品一区| 国产精品久久久久国产精品日日 | 久久综合色综合88| 性感美女久久精品| 成人激情综合网站| 久久久精品影视| 青青草91视频| 777亚洲妇女| 亚洲高清不卡在线| 色婷婷激情一区二区三区| 国产免费成人在线视频| 激情五月激情综合网| 日韩视频一区二区三区在线播放 | 国产一区二区三区久久久| 欧美精品自拍偷拍| 亚洲国产人成综合网站| 色综合久久久久| 亚洲人成人一区二区在线观看| 国产成人一区二区精品非洲| 久久免费看少妇高潮| 国内不卡的二区三区中文字幕| 日韩欧美国产电影| 蜜臀99久久精品久久久久久软件| 91麻豆精品久久久久蜜臀| 天堂影院一区二区| 欧美一区二区女人|