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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? diskmain.cpp

?? 三星2410,WinCE5.0下的硬盤IDE驅(qū)動(dòng).
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include <atamain.h>
/*++

Module Name:
    diskmain.cpp

Abstract:
    Base ATA/ATAPI device abstraction.

Revision History:

--*/

static HANDLE g_hTestUnitReadyThread = NULL;

// ----------------------------------------------------------------------------
// Function: CDisk
//     Constructor
//
// Parameters:
//     None
// ----------------------------------------------------------------------------

CDisk::CDisk(
    )
{
    // empty
}

// ----------------------------------------------------------------------------
// Function: CDisk
//     Constructor
//
// Parameters:
//     hKey -
// ----------------------------------------------------------------------------

CDisk::CDisk(
    HKEY hKey
    )
{
    m_dwDeviceFlags = 0;
    m_pNextDisk = NULL;
    m_pATAReg = NULL;
    m_pATARegAlt = NULL;
    m_dwDevice = 0;
    m_hDevKey = hKey;
    m_dwDeviceId = 0;
    m_dwPort = 0;
    m_f16Bit = FALSE;
    m_fAtapiDevice = FALSE;
    m_fInterruptSupported = FALSE;
    m_szDiskName = NULL;
    m_fDMAActive = FALSE;
    m_dwOpenCount = 0;
    m_dwUnitReadyTime = 0;
    m_dwStateFlag = 0;
    m_dwLastCheckTime = 0;
    m_dwStride = 1;
    m_pDiskPower = NULL;
    m_rgbDoubleBuffer = NULL;

    m_pPort = NULL;

    // init generic structures
    InitializeCriticalSection(&m_csDisk);
    memset(&m_Id, 0, sizeof(IDENTIFY_DATA));
    memset(&m_DiskInfo, 0, sizeof(DISK_INFO));
    memset(&m_InqData, 0, sizeof(INQUIRY_DATA));
}

// ----------------------------------------------------------------------------
// Function: ~CDisk
//     Destructor
//
// Parameters:
//     None
// ----------------------------------------------------------------------------

CDisk::~CDisk(
    )
{
    if (m_hDevKey) {
        RegCloseKey(m_hDevKey);
    }

    if(m_pDiskPower != NULL) {
        delete m_pDiskPower;
    }

    DeleteCriticalSection(&m_csDisk);

    // deallocate double buffer, if present
    if (NULL != m_rgbDoubleBuffer) {
        LocalFree((HLOCAL)m_rgbDoubleBuffer);
    }
}

// ----------------------------------------------------------------------------
// Function: StallExecution
//     Stall execution for the specified period of time
//
// Parameters:
//     dwTime -
// ----------------------------------------------------------------------------

void
CDisk::StallExecution(
    DWORD dwTime
    )
{
    if ((dwTime >= 100) && (m_dwDeviceFlags & DFLAGS_DEVICE_CDROM)) {
        Sleep (dwTime / 100);
    }
    else {
        ::StallExecution(dwTime * 10);
    }
}

#define HELPER_

// These functions should be inlined or converted to macros
void CDisk::TakeCS()                    { EnterCriticalSection(&m_csDisk); }
void CDisk::ReleaseCS()                 { LeaveCriticalSection(&m_csDisk); }
void CDisk::Open()                      { InterlockedIncrement((LONG *)&m_dwOpenCount); }
void CDisk::Close()                     { InterlockedDecrement((LONG *)&m_dwOpenCount); }
BOOL CDisk::IsAtapiDevice()             { return m_fAtapiDevice; }
BOOL CDisk::IsCDRomDevice()             { return (((m_Id.GeneralConfiguration >> 8) & 0x1f) == ATA_IDDEVICE_CDROM); }
BOOL CDisk::IsDVDROMDevice()            { return TRUE; }
BOOL CDisk::IsDiskDevice()              { return (((m_Id.GeneralConfiguration >> 8) & 0x1f) == ATA_IDDEVICE_DISK); }
BOOL CDisk::IsRemoveableDevice()        { return (m_Id.GeneralConfiguration & IDE_IDDATA_REMOVABLE); }
BOOL CDisk::IsDMASupported()            { return ((m_Id.Capabilities & IDENTIFY_CAPABILITIES_DMA_SUPPORTED) && m_fDMAActive); }
BOOL CDisk::IsDRQTypeIRQ()              { return ((m_Id.GeneralConfiguration >> 5) & 0x0003) == ATA_DRQTYPE_INTRQ; }
WORD CDisk::GetPacketSize()             { return m_Id.GeneralConfiguration & 0x0003 ? 16 : 12; }
BOOL CDisk::IsValidCommandSupportInfo() { return ((m_Id.CommandSetSupported2 & (1 << 14)) && !(m_Id.CommandSetSupported2 & (1 << 15))); }
BOOL CDisk::IsWriteCacheSupported()     { return ((m_Id.CommandSetSupported1 & COMMAND_SET_WRITE_CACHE_SUPPORTED) && IsValidCommandSupportInfo()); }
BOOL CDisk::IsPMSupported()             { return (m_Id.CommandSetSupported1 & COMMAND_SET_POWER_MANAGEMENT_SUPPORTED && IsValidCommandSupportInfo()); }
BOOL CDisk::IsPMEnabled()               { return (IsPMSupported() && (m_Id.CommandSetFeatureEnabled1 & COMMAND_SET_POWER_MANAGEMENT_ENABLED)); }

// These functions are called (1x) in atamain and should be inlined
void CDisk::SetActiveKey(TCHAR *szActiveKey)
{
    wcsncpy(m_szActiveKey, szActiveKey, MAX_PATH - 1);
    m_szActiveKey[MAX_PATH - 1] = 0;
}

void CDisk::SetDeviceKey(TCHAR *szDeviceKey)
{
    wcsncpy(m_szDeviceKey, szDeviceKey, MAX_PATH - 1);
    m_szDeviceKey[MAX_PATH - 1] = 0;
}

#define _HELPER

// ----------------------------------------------------------------------------
// Function: InitController
//     Reset the controller and determine whether a device is present on the
//     channel; if a device is present, then query and store its capabilities
//
// Parameters:
//     fForce -
// ----------------------------------------------------------------------------

BOOL
CDisk::InitController(
    BOOL fForce
    )
{
    BOOL bRet = TRUE;

    // if the controller has not already been reset, then perform a soft-reset
    // to enable the channel

    if (!(m_dwDeviceFlags & DFLAGS_DEVICE_INITIALIZED)) {

        // perform a soft-reset on the controller; if we don't do this, then
        // we won't be able to detect whether or not devices are present on the
        // channel

        bRet = ResetController(FALSE);
        if (!bRet) {
            goto exit;
        }

        // if interrupt is supported, enable interrupt

        if (m_fInterruptSupported) {
            SelectDevice();
            WriteAltDriveController(ATA_CTRL_ENABLE_INTR);
            EnableInterrupt();
        }
    }

    // issue IDENTIFY DEVICE and/or IDENTIFY PACKET DEVICE

    bRet = Identify();
    if (!bRet) {
        DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T(
            "Atapi!CDisk::InitController> Device did not respond to identify\r\n"
            )));
        goto exit;
    }
    else {
        DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T(
            "Atapi!CDisk::InitController> Device responded to identify\r\n"
            )));
        m_dwDeviceFlags |= DFLAGS_DEVICE_INITIALIZED;
    }

exit:;
    return bRet;
}

// ----------------------------------------------------------------------------
// Function: ConfigureRegisterBlock
//     This function is called by DSK_Init before any other CDisk function to
//     set up the register block.
//
// Parameters:
//     dwStride -
// ----------------------------------------------------------------------------

VOID
CDisk::ConfigureRegisterBlock(
    DWORD dwStride
    )
{
	
    m_dwStride = dwStride;
    m_dwDataDrvCtrlOffset = ATA_REG_DATA * dwStride;
    m_dwFeatureErrorOffset = ATA_REG_FEATURE * dwStride;
    m_dwSectCntReasonOffset = ATA_REG_SECT_CNT * dwStride;
    m_dwSectNumOffset = ATA_REG_SECT_NUM * dwStride;
    m_dwDrvHeadOffset = ATA_REG_DRV_HEAD * dwStride;
    m_dwCommandStatusOffset = ATA_REG_COMMAND * dwStride;
    m_dwByteCountLowOffset = ATA_REG_BYTECOUNTLOW * dwStride;
    m_dwByteCountHighOffset = ATA_REG_BYTECOUNTHIGH * dwStride;
    m_dwAltStatusOffset = ATA_REG_ALT_STATUS_CS1 * dwStride;
    m_dwAltDrvCtrl = ATA_REG_DRV_CTRL_CS1 * dwStride;
}

// ----------------------------------------------------------------------------
// Function: Init
//     This function is called by the IDE/ATA controller enumerator to trigger
//     the initialization of a device
//
// Parameters:
//     hActiveKey -
// ----------------------------------------------------------------------------

BOOL
CDisk::Init(
    HKEY hActiveKey
    )
{
    BOOL fRet = FALSE;

    // replicate CDisk::ReadRegistry

    m_dwWaitCheckIter = m_pPort->m_pController->m_pIdeReg->dwStatusPollCycles;
    m_dwWaitSampleTimes = m_pPort->m_pController->m_pIdeReg->dwStatusPollsPerCycle;
    m_dwWaitStallTime = m_pPort->m_pController->m_pIdeReg->dwStatusPollCyclePause;

    m_dwDiskIoTimeOut = DEFAULT_DISK_IO_TIME_OUT;

    // replicate CDisk::ReadSettings

    m_dwUnitReadyTime = DEFAULT_MEDIA_CHECK_TIME;

    // if DMA=2 and this is not an ATAPI device, then we'll set m_fDMAActive in Identify
    if (1 == m_pPort->m_pDskReg[m_dwDeviceId]->dwDMA) { // 0=PIO, 1=DMA, 2=ATA DMA only
        m_fDMAActive = TRUE;
    }
    m_dwDMAAlign = m_pPort->m_pController->m_pIdeReg->dwDMAAlignment;

    // m_dwDeviceFlags |= DFLAGS_DEVICE_ISDVD; this is ignored

    if (m_pPort->m_pDskReg[m_dwDeviceId]->dwInterruptDriven) {
        m_fInterruptSupported = TRUE;
    }

    // initialize controller

    if (!InitController(TRUE)) {
        DEBUGMSG(ZONE_INIT, (_T(
            "Atapi!CDisk::Init> Failed to initialize device\r\n"
            )));
        goto exit;
    }

    // set write cache mode, if write cache mode supported

    if (m_Id.CommandSetSupported1 & 0x20) {
        if (SetWriteCacheMode(m_pPort->m_pDskReg[m_dwDeviceId]->dwWriteCache)) {
            if (m_pPort->m_pDskReg[m_dwDeviceId]->dwWriteCache) {
                m_dwDeviceFlags |= DFLAGS_USE_WRITE_CACHE;
                DEBUGMSG(ZONE_INIT, (_T(
                    "Atapi!CDisk::Init> Enabled write cache\r\n"
                    )));
            }
            else {
                m_dwDeviceFlags &= ~DFLAGS_USE_WRITE_CACHE;
                DEBUGMSG(ZONE_INIT, (_T(
                    "Atapi!CDisk::Init> Disabled on device write cache\r\n"
                    )));
            }
        }
        else {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Failed to set write cache mode\r\n"
                )));
        }
    }

    // set read look-ahead, if read look-ahead supported

    if ((m_Id.CommandSetSupported1 & 0x40) && m_pPort->m_pDskReg[m_dwDeviceId]->dwLookAhead) {
        if (SetLookAhead()) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Enabled read look-ahead\r\n"
                )));
        }
        else {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Failed to enable read look-ahead\r\n"
                )));
        }
    }

    // set transfer mode, if a specific transfer mode was specified in the
    // device's instance key

    BYTE bTransferMode = (BYTE)m_pPort->m_pDskReg[m_dwDeviceId]->dwTransferMode;
    if (0xFF != bTransferMode) {
        if (0x00 == bTransferMode) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Selecting PIO default mode(0x%x)\r\n"
                ), bTransferMode));
        }
        else if (0x01 == bTransferMode) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Selecting PIO default mode(0x%x); disabled IORDY\r\n"
                ), bTransferMode));
        }
        else if ((bTransferMode & 0xF8) == 0x08) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Selecting PIO flow control mode %d (0x%x)\r\n"
                ), (bTransferMode & 0x08), bTransferMode));
        }
        else if ((bTransferMode & 0xF0) == 0x20) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Selecting Multi-word DMA mode %d (0x%x)\r\n"
                ), bTransferMode, bTransferMode));
        }
        else if ((bTransferMode & 0xF0) == 0x40) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Selecting Ultra DMA mode %d (0x%x)\r\n"
                ), bTransferMode, bTransferMode));
        }
        else {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Unknown transfer mode(0x%x)\r\n"
                ), bTransferMode));
        }
        // @bTransferMode is a valid transfer mode
        if (!SetTransferMode(bTransferMode)) {
            DEBUGMSG(ZONE_INIT, (_T(
                "Atapi!CDisk::Init> Failed to set transfer mode(0x%x)\r\n"
                ), bTransferMode));
        }
    }

    fRet = TRUE;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲福利国产精品| 色婷婷久久久综合中文字幕| 日韩激情视频在线观看| 一区二区激情视频| 一区二区三区在线高清| 亚洲狼人国产精品| 亚洲精品自拍动漫在线| 亚洲男人的天堂在线aⅴ视频| 亚洲丝袜另类动漫二区| 亚洲激情图片qvod| 亚洲大片免费看| 污片在线观看一区二区| 日韩av电影免费观看高清完整版| 天天影视涩香欲综合网| 美女爽到高潮91| 国内精品嫩模私拍在线| 高清国产午夜精品久久久久久| 国产不卡一区视频| 91美女在线看| 亚洲天堂成人网| 亚洲欧美电影一区二区| 亚洲成年人网站在线观看| 亚洲 欧美综合在线网络| 日韩电影一区二区三区四区| 欧美aaaaa成人免费观看视频| 美女网站色91| 成人动漫视频在线| 欧美色精品在线视频| 欧美一区二区三区免费视频| 久久人人爽人人爽| 亚洲色图19p| 日韩高清不卡一区二区三区| 国产一区二区三区在线观看免费 | 精品国产一区二区三区忘忧草 | 国产精品久久久久一区二区三区共 | 欧美嫩在线观看| 欧美一区二区二区| 欧美极品少妇xxxxⅹ高跟鞋| 又紧又大又爽精品一区二区| 日韩和的一区二区| 国产黄色精品视频| 在线观看日韩精品| 精品国产一二三区| 亚洲婷婷综合色高清在线| 午夜精品视频一区| 成人在线视频一区二区| 在线观看国产91| 久久久精品一品道一区| 亚洲综合视频在线| 国产一区二区三区精品欧美日韩一区二区三区 | 久久久国产精品不卡| 亚洲欧美日韩系列| 久久66热偷产精品| 一本大道久久a久久综合| 欧美一区二区三区视频免费播放| 国产欧美日韩在线看| 亚洲一二三区在线观看| 国产福利精品一区| 欧美综合一区二区| 国产视频一区不卡| 天天做天天摸天天爽国产一区| 国产二区国产一区在线观看| 欧美巨大另类极品videosbest | 欧美亚洲免费在线一区| 日韩三级在线免费观看| 亚洲人xxxx| 国产a视频精品免费观看| 91精品中文字幕一区二区三区| 国产精品美女久久久久aⅴ| 免费成人在线观看| 欧美视频在线播放| 国产精品久久久久久户外露出| 免费成人在线视频观看| 在线观看日产精品| 亚洲欧洲性图库| 国产精一区二区三区| 欧美精品18+| 一区二区三区四区亚洲| 成人教育av在线| 日韩美女视频在线| 天堂蜜桃91精品| 欧美在线视频你懂得| 亚洲人成在线播放网站岛国| 国产一区二区按摩在线观看| 69精品人人人人| 一区二区三区高清在线| www.成人在线| 国产精品美女久久久久久久| 国产麻豆成人精品| 久久综合狠狠综合久久综合88| 日韩精品亚洲专区| 欧美天天综合网| 亚洲精品国产成人久久av盗摄| www.欧美色图| 国产精品成人免费在线| 成人国产在线观看| 欧美国产在线观看| 国产成人av网站| 国产欧美一区二区三区网站| 国产一区二区日韩精品| 欧美v国产在线一区二区三区| 蜜臀99久久精品久久久久久软件| 欧美另类一区二区三区| 婷婷综合另类小说色区| 在线播放中文字幕一区| 三级在线观看一区二区| 69久久99精品久久久久婷婷| 丝瓜av网站精品一区二区| 欧美日韩国产a| 日韩精品亚洲一区二区三区免费| 欧美日韩国产综合视频在线观看 | 久久久久成人黄色影片| 国产精品一卡二| 国产情人综合久久777777| 粉嫩一区二区三区性色av| 国产精品―色哟哟| 91性感美女视频| 一区二区三区四区精品在线视频| 色噜噜狠狠色综合中国| 亚洲国产日日夜夜| 日韩一区二区免费高清| 国产永久精品大片wwwapp| 欧美激情在线观看视频免费| 99久久综合色| 亚洲国产精品久久久久婷婷884 | 亚洲第一二三四区| 制服丝袜在线91| 激情综合网天天干| 中文字幕欧美激情一区| 在线观看国产日韩| 奇米综合一区二区三区精品视频| 亚洲精品在线三区| 成人高清免费在线播放| 亚洲乱码国产乱码精品精98午夜| 欧美另类z0zxhd电影| 国产一区二三区| 亚洲欧美二区三区| 日韩一本二本av| 成人午夜激情视频| 亚洲制服丝袜av| 2020国产精品自拍| 色哟哟亚洲精品| 久久国产精品99久久人人澡| 中文字幕欧美激情一区| 欧美肥大bbwbbw高潮| 国产激情一区二区三区四区| 一区二区三区精品视频| 精品国产一区二区精华| 91小视频在线免费看| 久久不见久久见免费视频7 | 国产精品99久久久久久久女警| 亚洲欧洲www| 91精品国产综合久久精品| 粗大黑人巨茎大战欧美成人| 亚洲国产aⅴ天堂久久| 国产欧美日韩视频在线观看| 欧美三级中文字幕在线观看| 国产成人精品亚洲777人妖| 亚洲国产精品视频| 欧美国产欧美综合| 欧美一级淫片007| 91丨porny丨中文| 老司机精品视频线观看86| 亚洲精品第1页| 国产亚洲短视频| 欧美一区二区二区| 91成人免费电影| 东方aⅴ免费观看久久av| 奇米在线7777在线精品| 亚洲一区二区不卡免费| 久久国产精品无码网站| 亚洲综合一区在线| 国产欧美视频一区二区| 91精品蜜臀在线一区尤物| 91年精品国产| 丁香婷婷深情五月亚洲| 日本欧美在线看| 一区二区三区不卡在线观看| 国产嫩草影院久久久久| 欧美精品一区二区三区蜜桃| 欧美日韩另类国产亚洲欧美一级| av中文字幕亚洲| 风间由美性色一区二区三区| 久久精品国产**网站演员| 天天色综合天天| 亚洲成人av在线电影| 亚洲激情欧美激情| 亚洲欧洲制服丝袜| 中文字幕色av一区二区三区| 国产欧美视频一区二区三区| 精品播放一区二区| 欧美电视剧在线看免费| 正在播放亚洲一区| 欧美日韩午夜在线| 欧美亚洲动漫制服丝袜| 在线视频国内一区二区| 在线精品视频一区二区三四| 日本国产一区二区| av在线播放成人| 91原创在线视频|