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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? diskmain.cpp

?? 三星2410,WinCE5.0下的硬盤(pán)IDE驅(qū)動(dòng).
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
    }
    else if(newDx == D3 || newDx == D4) {
        bCmd = ATA_CMD_SLEEP;
    }
    else {
        DEBUGMSG(ZONE_WARNING, (_T(
            "CDisk::SetDiskPowerState> Invalid power state value(%u)\r\n"
            ), newDx));
        return FALSE;
    }

    // update the disk power state
    return SendDiskPowerCommand(bCmd);
}

// ----------------------------------------------------------------------------
// Function: WakeUp
//     Wake the device up from sleep
//
// Parameters:
//     None
// ----------------------------------------------------------------------------

BOOL
CDisk::WakeUp(
    )
{
    if (!ResetController(FALSE)) {
        return FALSE;
    }
    return SendIdentifyDevice(IsAtapiDevice());
}

// ----------------------------------------------------------------------------
// Function: MainIoctl
//     Process IOCTL_DISK_ and DISK_IOCTL_ I/O controls
//
// Parameters:
//     pIOReq -
// ----------------------------------------------------------------------------

DWORD
CDisk::MainIoctl(
    PIOREQ pIOReq
    )
{
    DWORD dwError = ERROR_SUCCESS;

    DEBUGMSG(ZONE_IOCTL, (TEXT(
        "Atapi!CDisk::MainIoctl> IOCTL(%x), device(%x)\r\n"
        ), pIOReq->dwCode, m_dwDeviceId));

    // device is powering down; fail

    if (m_dwDeviceFlags & DFLAGS_DEVICE_PWRDN) {
        SetLastError(ERROR_DEVICE_NOT_AVAILABLE);
        return FALSE;
    }

    switch(pIOReq->dwCode) {
        case IOCTL_DISK_GETINFO:
        case DISK_IOCTL_GETINFO:
            if (IsCDRomDevice()) {
                dwError = ERROR_BAD_COMMAND;
            }
            else {
                dwError = GetDiskInfo(pIOReq);
            }
            break;
        case IOCTL_DISK_DEVICE_INFO:
            dwError = GetDeviceInfo(pIOReq);
            break;
        case DISK_IOCTL_GETNAME:
        case IOCTL_DISK_GETNAME:
            dwError = GetDiskName(pIOReq);
            break;
        case DISK_IOCTL_SETINFO:
        case IOCTL_DISK_SETINFO:
            dwError = SetDiskInfo(pIOReq);
            break;
        case DISK_IOCTL_READ:
        case IOCTL_DISK_READ:
            if (!ValidateSg((PSG_REQ)pIOReq->pInBuf,pIOReq->dwInBufSize)) {
                dwError = ERROR_INVALID_PARAMETER;
            }
            else {
                if (IsDMASupported()) {
                    dwError = ReadWriteDiskDMA(pIOReq, TRUE);
                }
                else {
                    dwError = ReadWriteDisk(pIOReq, TRUE);
                }
            }
            break;
        case DISK_IOCTL_WRITE:
        case IOCTL_DISK_WRITE:
            if (!ValidateSg((PSG_REQ)pIOReq->pInBuf,pIOReq->dwInBufSize)) {
                dwError=ERROR_INVALID_PARAMETER;
            }
            else {
                if (IsDMASupported()) {
                    dwError = ReadWriteDiskDMA(pIOReq, FALSE);
                }
                else {
                    dwError = ReadWriteDisk(pIOReq, FALSE);
                }
            }
            break;
        case IOCTL_DISK_GET_STORAGEID:
            dwError = GetStorageId(pIOReq);
            break;
        case DISK_IOCTL_FORMAT_MEDIA:
        case IOCTL_DISK_FORMAT_MEDIA:
            dwError = ERROR_SUCCESS;
            break;;
        case IOCTL_DISK_FLUSH_CACHE:
            dwError = FlushCache();
            break;

        default:
            dwError = ERROR_NOT_SUPPORTED;
            break;
    }

    return dwError;
}

// ----------------------------------------------------------------------------
// Function: PerformIoctl
//     This is the top-most IOCTL processor and is used to trap IOCTL_POWER_
//     I/O controls to pass to the associated power management object
//
// Parameters:
//     pIOReq -
// ----------------------------------------------------------------------------

BOOL
CDisk::PerformIoctl(
    PIOREQ pIOReq
    )
{
    DWORD dwError = ERROR_SUCCESS;

    DEBUGMSG(ZONE_IOCTL, (TEXT(
        "Atapi!CDisk::PerformIoctl> IOCTL(%x), device(%x)\r\n"
        ), pIOReq->dwCode, m_dwDeviceId));

    if (pIOReq->pBytesReturned) {
        *(pIOReq->pBytesReturned) = 0;
    }

    TakeCS();
    m_pPort->TakeCS();

    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STARTIOCTL, pIOReq, sizeof(*pIOReq), 0, CELZONE_ALWAYSON, 0, FALSE);

    __try {

        if (pIOReq->dwCode == IOCTL_POWER_CAPABILITIES) {

            // instantiate DiskPower object on first use, if necessary

            if (m_pDiskPower == NULL) {
                CDiskPower *pDiskPower = GetDiskPowerInterface();
                if (pDiskPower == NULL) {
                    DEBUGMSG(ZONE_WARNING, (_T(
                        "Atapi!CDisk::PerformIoctl> Failed to create power management object\r\n"
                        )));
                }
                else if (!pDiskPower->Init(this)) {
                    DEBUGMSG(ZONE_WARNING, (_T(
                        "Atapi!CDisk::PerformIoctl> Failed to initialize power management\r\n"
                        )));
                    delete pDiskPower;
                }
                else {
                    m_pDiskPower = pDiskPower;
                }
            }
        }

        if (m_pDiskPower != NULL) {

            // is this a power IOCTL?
            dwError = m_pDiskPower->DiskPowerIoctl(pIOReq);
            if (dwError != ERROR_NOT_SUPPORTED) {
                goto done;
            }

            // request that the disk spin up (if it's not up already)
            if (!m_pDiskPower->RequestDevice()) {
                // the disk is powered down
                dwError = ERROR_RESOURCE_DISABLED;
                goto done;
            }
        }

        // call the driver
        dwError = MainIoctl(pIOReq);

        // indicate we're done with the disk
        if (m_pDiskPower != NULL) {
            m_pDiskPower->ReleaseDevice();
        }

done:;

    } __except(EXCEPTION_EXECUTE_HANDLER) {
        dwError = ERROR_GEN_FAILURE;
    }

    if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_COMPLETEIOCTL, &dwError, sizeof(dwError), 0, CELZONE_ALWAYSON, 0, FALSE);

    m_pPort->ReleaseCS();
    ReleaseCS();

    if (dwError != ERROR_SUCCESS) {
        SetLastError(dwError);
    }

    return (ERROR_SUCCESS == dwError);
}

// ----------------------------------------------------------------------------
// Function: PostInit
//     This function facilitates backward compatibility
//
// Parameters:
//     pPostInitBuf -
// ----------------------------------------------------------------------------

BOOL
CDisk::PostInit(
    PPOST_INIT_BUF pPostInitBuf
    )
{
    DWORD dwError = ERROR_SUCCESS;

    DEBUGMSG(ZONEID_INIT, (TEXT("Atapi!CDisk::PostInit> device(%d)\r\n"), m_dwDeviceId));

    m_hDevice = pPostInitBuf->p_hDevice;

    return (dwError == ERROR_SUCCESS);
}

// ----------------------------------------------------------------------------
// Function: GetDiskInfo
//     Implement IOCTL_DISK_GETINFO
//
// Parameters:
//     pIOReq -
// ----------------------------------------------------------------------------

DWORD
CDisk::GetDiskInfo(
    PIOREQ pIOReq
    )
{
    DWORD dwError = ERROR_SUCCESS;
    DISK_INFO *pInfo = NULL;

    // for B/C, this call has three forms; only pInBuf, only pOutBuf, or both
    // if both, then use pOutBuf

    if (pIOReq->pInBuf) {
        if (pIOReq->dwInBufSize != sizeof(DISK_INFO)) {
            return ERROR_INVALID_PARAMETER;
        }
        pInfo = (DISK_INFO *)pIOReq->pInBuf;
    }

    if (pIOReq->pOutBuf) {
        if (pIOReq->dwOutBufSize!= sizeof(DISK_INFO)) {
            return ERROR_INVALID_PARAMETER;
        }
        pInfo = (DISK_INFO *)pIOReq->pOutBuf;
    }

    if (!pInfo) {
        DEBUGMSG(ZONE_ERROR|ZONE_IOCTL, (_T(
            "Atapi!CDisk::GetDiskInfo> bad argument; pInBuf/pOutBuf null\r\n")));
        return ERROR_INVALID_PARAMETER;
    }

    // TODO: if device is ATAPI, call AtapiGetDiskInfo

    if (ERROR_SUCCESS == dwError) {
        __try {
            memcpy(pInfo, &m_DiskInfo, sizeof(DISK_INFO));
            pInfo->di_flags |= DISK_INFO_FLAG_PAGEABLE;
            pInfo->di_flags &= ~DISK_INFO_FLAG_UNFORMATTED;
            if (pIOReq->pBytesReturned){
                *(pIOReq->pBytesReturned) = sizeof(DISK_INFO);
            }
        } __except(EXCEPTION_EXECUTE_HANDLER) {
            dwError = ERROR_INVALID_PARAMETER;
        }
    }

    return dwError;
}

// ----------------------------------------------------------------------------
// Function: SetDiskInfo
//     Implement IOCTL_DISK_SETINFO
//
// Parameters:
//     pSgReq -
//     InBufLen -
// ----------------------------------------------------------------------------

DWORD
CDisk::SetDiskInfo(
    PIOREQ pIOReq
    )
{
    DWORD dwError = ERROR_SUCCESS;
    DISK_INFO *pInfo = (DISK_INFO *)pIOReq->pInBuf;

    if ((pIOReq->pInBuf == NULL) || (pIOReq->dwInBufSize != sizeof(DISK_INFO))) {
        return ERROR_INVALID_PARAMETER;
    }

    memcpy(&m_DiskInfo, pInfo, sizeof(DISK_INFO));

    return dwError;
}

// ----------------------------------------------------------------------------
// Function: GetDeviceInfo
//     IOCTL_DISK_DEVICE_INFO
//
// Parameters:
//     pIOReq -
// ----------------------------------------------------------------------------

DWORD
CDisk::GetDeviceInfo(
    PIOREQ pIOReq
    )
{
    PSTORAGEDEVICEINFO psdi = (PSTORAGEDEVICEINFO)pIOReq->pInBuf;
    HKEY hKey;

    if ((pIOReq->dwInBufSize == 0) || (pIOReq->pInBuf == NULL)) {
        return ERROR_INVALID_PARAMETER;
    }

    if (pIOReq->pBytesReturned) {
        *(pIOReq->pBytesReturned) = sizeof(STORAGEDEVICEINFO);
    }

    psdi->dwDeviceClass = 0;
    psdi->dwDeviceType = 0;
    psdi->dwDeviceFlags = 0;

    PTSTR szProfile = psdi->szProfile;

    wcscpy(szProfile, L"Default");

    if (ERROR_SUCCESS != RegOpenKeyEx( HKEY_LOCAL_MACHINE, m_szDeviceKey, 0, 0, &hKey)) {
        hKey = NULL;
    }

    if (IsAtapiDevice() && IsCDRomDevice()) {

        psdi->dwDeviceClass = STORAGE_DEVICE_CLASS_MULTIMEDIA;
        psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_REMOVABLE_MEDIA;
        psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_ATAPI;
        psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_PCIIDE;
        psdi->dwDeviceFlags |= STORAGE_DEVICE_FLAG_MEDIASENSE;
        psdi->dwDeviceFlags |= STORAGE_DEVICE_FLAG_READONLY;

        if (!hKey || !AtaGetRegistryString(hKey, REG_VALUE_CDPROFILE, &szProfile, sizeof(psdi->szProfile))) {
            wcscpy(psdi->szProfile, REG_VALUE_CDPROFILE);
        }

    }
    else {

        psdi->dwDeviceClass = STORAGE_DEVICE_CLASS_BLOCK;
        psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_PCIIDE;
        psdi->dwDeviceType |= STORAGE_DEVICE_TYPE_ATA;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久综合婷婷| 91色porny在线视频| 7777精品伊人久久久大香线蕉 | 91国产精品成人| 一区在线中文字幕| 一本大道综合伊人精品热热 | 日韩精品专区在线影院重磅| 国产精品美女久久久久久久久久久 | 91精彩视频在线| 一区二区三区资源| 欧美日韩国产一级二级| 日韩av中文在线观看| 成人性生交大片免费| 亚洲欧美自拍偷拍色图| 欧美在线不卡一区| 看片网站欧美日韩| 久久久影院官网| 色综合一区二区| 国产日产欧美一区| 91浏览器打开| 美女诱惑一区二区| 国产精品久久久久一区二区三区共| 日韩电影在线看| 久久久久久亚洲综合| 91丨porny丨蝌蚪视频| 日韩电影免费一区| 欧美日韩日日摸| 精品亚洲porn| 精品免费视频一区二区| 成人动漫一区二区| 洋洋av久久久久久久一区| 日韩欧美中文字幕制服| www.成人在线| 日本伊人精品一区二区三区观看方式 | 久久美女艺术照精彩视频福利播放| 五月综合激情婷婷六月色窝| 精品国产99国产精品| 毛片av中文字幕一区二区| 国产欧美精品国产国产专区| 欧美亚洲愉拍一区二区| 国产精品亚洲一区二区三区妖精 | 亚洲成av人片一区二区| 久久众筹精品私拍模特| 欧美亚洲综合久久| 粉嫩在线一区二区三区视频| 日韩精品乱码av一区二区| 国产精品美女久久久久久| 欧美一区二区网站| 麻豆国产91在线播放| 老司机精品视频线观看86| 136国产福利精品导航| 欧美一区二区黄| 在线观看视频一区| www.色综合.com| 国产精品亚洲第一| 欧美a级理论片| 一个色在线综合| 欧美一区二区三区播放老司机| 日韩电影免费在线看| 一区二区三区在线看| 国产清纯白嫩初高生在线观看91| 99热99精品| 成人影视亚洲图片在线| 国产在线播放一区三区四| 美女精品一区二区| 国产精品免费aⅴ片在线观看| 91蝌蚪国产九色| 成人h精品动漫一区二区三区| 一区二区三区久久久| 最新日韩在线视频| 国产精品女主播在线观看| 337p粉嫩大胆噜噜噜噜噜91av| av电影一区二区| 国产成人小视频| 国产在线播放一区三区四| 韩日精品视频一区| 久草精品在线观看| 亚洲男人的天堂在线观看| 欧美国产日韩在线观看| 国产精品视频yy9299一区| 精品视频一区二区三区免费| 精品中文av资源站在线观看| 久久精品国产亚洲一区二区三区| 国产精品国产三级国产aⅴ入口| 欧美区在线观看| 从欧美一区二区三区| 成人性生交大片免费看中文| 国产suv精品一区二区三区| 国产999精品久久| 亚洲成人av中文| 日韩中文字幕一区二区三区| 国产欧美一区二区精品仙草咪| 欧美三级三级三级爽爽爽| 欧美午夜精品免费| 成人美女在线观看| 91在线porny国产在线看| 一本色道久久综合亚洲aⅴ蜜桃| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品国产伦一区二区三区观看方式| 久久亚洲二区三区| 日韩欧美一级精品久久| 久久综合久久久久88| 91精品欧美一区二区三区综合在| 精品国产成人在线影院| 91免费视频观看| 欧洲国内综合视频| 欧美一区二区三区四区五区| 亚洲精品一区二区三区影院| 51精品视频一区二区三区| 日韩精品一区二区三区四区视频| 欧美亚洲精品一区| 欧美r级在线观看| 国产精品国产a| 国产日韩欧美精品一区| 日韩美女啊v在线免费观看| 日韩精品一二三| 国产成人免费在线观看| 91高清视频免费看| 精品国产乱码久久久久久久 | 这里只有精品99re| 全国精品久久少妇| 精品国产免费久久| 久久久91精品国产一区二区精品| 69堂精品视频| 欧美日韩一区二区三区在线 | 色综合欧美在线| 日韩色视频在线观看| 中文字幕一区二| 免费精品99久久国产综合精品| 日韩电影一区二区三区四区| 午夜精品免费在线| 成人免费看片app下载| 成人在线综合网| 日韩一级在线观看| 精品久久久久久无| 夜夜揉揉日日人人青青一国产精品| 亚洲九九爱视频| 国产真实乱偷精品视频免| 日本韩国一区二区三区视频| 久久婷婷国产综合国色天香| 亚洲线精品一区二区三区| 成人综合日日夜夜| 日韩三级视频在线看| 亚洲一区二区偷拍精品| 99re热这里只有精品视频| 精品国产精品网麻豆系列| 欧美日韩免费观看一区二区三区| 色欧美88888久久久久久影院| 色天天综合色天天久久| 国产欧美精品一区二区色综合| 国产精品国产三级国产普通话99| 亚洲免费看黄网站| 国产成人精品免费| 色综合久久综合| 中文子幕无线码一区tr| 亚洲人成电影网站色mp4| 国产电影一区二区三区| 精品乱码亚洲一区二区不卡| 久久蜜桃av一区精品变态类天堂| 国产精品天干天干在线综合| 国产在线精品免费| 91天堂素人约啪| 国产精品私人自拍| 高清在线成人网| 久久久久久久久99精品| 夜夜嗨av一区二区三区网页| 91麻豆高清视频| 日韩美女主播在线视频一区二区三区| 久久影院午夜片一区| 麻豆精品视频在线观看| 日韩欧美中文一区| 另类综合日韩欧美亚洲| 99视频国产精品| 一区二区三区不卡视频| 在线亚洲高清视频| 久久一日本道色综合| 国产一区二区日韩精品| 久久久久国产精品免费免费搜索| 亚洲综合成人在线| 欧美视频一区在线观看| 天堂影院一区二区| 日韩美女天天操| 国产又粗又猛又爽又黄91精品| 欧美日韩在线精品一区二区三区激情| 久久免费午夜影院| 粉嫩一区二区三区性色av| 一区在线观看免费| 欧美影院精品一区| 麻豆精品视频在线| 欧美酷刑日本凌虐凌虐| 日韩精品亚洲一区| 久久久久久久性| 一本大道综合伊人精品热热| 国产视频不卡一区| 99久久免费精品| 亚洲第一福利一区| 日本久久精品电影| 蜜臀久久99精品久久久久久9| 欧美日韩国产一二三| 奇米影视在线99精品|