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

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

?? sdmemmain.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
          (PUCHAR)&pDevice->IdleTimeout,
          &dataLength) == ERROR_SUCCESS
       ) {
      // key is present
      DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDMemory: Initialize: Using idle timeout of %u milliseconds\r\n"),
            pDevice->IdleTimeout));
    }

    // read "IdlePowerState"
    // default power state for idle
    // if the power state is greater than D2, we do idle checking
    pDevice->PowerStateForIdle = D2;
    dataLength = sizeof(DWORD);
    data = 0;
    if (RegQueryValueEx(
          hSubKey,
          IDLE_POWER_STATE,
          NULL,
          NULL,
          (PUCHAR)&data,
          &dataLength) == ERROR_SUCCESS
       ) {
      if (data <= (ULONG)D4) {
        pDevice->PowerStateForIdle = (CEDEVICE_POWER_STATE)data;
      }
    }

    DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDMemory: Idle Timeout: %d Idle Power State: %d\r\n"),
          pDevice->IdleTimeout,
          pDevice->PowerStateForIdle));

    RegCloseKey(hSubKey);
  }

  // allocate our buffer list; we need 2 buffers: 1 for read and 1 for write data
  BufferSize = (ULONG)(pDevice->BlockTransferSize * SD_BLOCK_SIZE);

  // create the data buffer memory list
  pDevice->hBufferList = SDCreateMemoryList(SD_MEMORY_TAG, 2, BufferSize);
  if (pDevice->hBufferList == NULL) {
    DEBUGMSG(SDCARD_ZONE_ERROR, (TEXT("SDMemory: Initialize: Failed to allocate buffer list\r\n")));
    CleanUpDevice(pDevice);
    return 0;
  }

  pDevice->fPreDeinitCalled = FALSE;

  InitializePowerManagement(pDevice);

  DEBUGMSG(SDCARD_ZONE_INIT, (TEXT("SDMemory: -SMC_Init\r\n")));

  return (DWORD)pDevice;
}

///////////////////////////////////////////////////////////////////////////////
//  SMC_IOControl - the I/O control entry point for the memory driver
//  Input:  Handle - the context returned from SMC_Open
//          IoctlCode - the ioctl code
//          pInBuf - the input buffer from the user
//          InBufSize - the length of the input buffer
//          pOutBuf - the output buffer from the user
//          InBufSize - the length of the output buffer
//          pBytesReturned - the size of the transfer
//  Output:
//  Return:  TRUE if ioctl was handled
//  Notes:
///////////////////////////////////////////////////////////////////////////////
extern "C" BOOL WINAPI SMC_IOControl(
    DWORD   Handle,
    DWORD   IoctlCode,
    PBYTE   pInBuf,
    DWORD   InBufSize,
    PBYTE   pOutBuf,
    DWORD   OutBufSize,
    PDWORD  pBytesReturned
    )
{
    DWORD            Status = ERROR_SUCCESS;             // win32 status
    PSD_MEMCARD_INFO pHandle = (PSD_MEMCARD_INFO)Handle; // memcard info
    PSG_REQ          pSG;                                // scatter gather buffer
    SD_API_STATUS    sdStatus;                           // SD API status
    DWORD            SafeBytesReturned = 0;              // safe copy of pBytesReturned
    DWORD             dwStartTicks = 0;

    DEBUGMSG(SDCARD_ZONE_FUNC, (TEXT("SDMemory: +SMC_IOControl\r\n")));

    // any of these IOCTLs can access the device instance or card handle so we
    // must protect it from being freed from XXX_Deinit; Windows CE does not
    // synchronize the  callback from Deinit
    AcquireRemovalLock(pHandle);

    if (pHandle->fPreDeinitCalled) {
        Status = ERROR_INVALID_HANDLE;
        goto ErrorStatusReturn;
    }

    sdStatus = RequestPrologue(pHandle, IoctlCode);

    if (!SD_API_SUCCESS(sdStatus)) {
        ReleaseRemovalLock(pHandle);
        SetLastError(SDAPIStatusToErrorCode(sdStatus));
        return FALSE;
    }

    DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("SMC_IOControl: Recevied IOCTL %d ="), IoctlCode));
    switch(IoctlCode) {
        case IOCTL_DISK_READ:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_READ\r\n")));
            break;
        case DISK_IOCTL_READ:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("DISK_IOCTL_READ\r\n")));
            break;
        case IOCTL_DISK_WRITE:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_WRITE\r\n")));
            break;
        case DISK_IOCTL_WRITE:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("DISK_IOCTL_WRITE\r\n")));
            break;
        case IOCTL_DISK_GETINFO:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_GETINFO\r\n")));
            break;
        case DISK_IOCTL_GETINFO:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("DISK_IOCTL_GETINFO\r\n")));
            break;
        case IOCTL_DISK_SETINFO:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_SETINFO\r\n")));
            break;
        case DISK_IOCTL_INITIALIZED:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("DISK_IOCTL_INITIALIZED\r\n")));
            break;
        case IOCTL_DISK_INITIALIZED:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_INITIALIZED\r\n")));
            break;
        case IOCTL_DISK_GETNAME:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_GETNAME\r\n")));
            break;
        case DISK_IOCTL_GETNAME:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("DISK_IOCTL_GETNAME\r\n")));
            break;
        case IOCTL_DISK_GET_STORAGEID:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_GET_STORAGEID\r\n")));
            break;
        case IOCTL_DISK_FORMAT_MEDIA:
        case DISK_IOCTL_FORMAT_MEDIA:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_FORMAT_MEDIA\r\n")));
            break;
        case IOCTL_DISK_DEVICE_INFO:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_DEVICE_INFO\r\n")));
            break;
        case IOCTL_DISK_DELETE_SECTORS:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("IOCTL_DISK_DELETE_SECTORS\r\n")));
            break;
        default:
            DEBUGMSG(SDCARD_ZONE_INFO, (TEXT("**UNKNOWN**\r\n")));
            break;
    }

    // validate parameters
    switch(IoctlCode) {

        case IOCTL_DISK_READ:
        case DISK_IOCTL_READ:
        case IOCTL_DISK_WRITE:
        case DISK_IOCTL_WRITE:
            if (pInBuf == NULL || InBufSize < sizeof(SG_REQ) || InBufSize > (sizeof(SG_REQ) + ((MAX_SG_BUF - 1) * sizeof(SG_BUF)))) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case DISK_IOCTL_GETINFO:
        case IOCTL_DISK_SETINFO:
            if (NULL == pInBuf || InBufSize != sizeof(DISK_INFO)) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_DELETE_SECTORS:
            if (pInBuf == NULL || InBufSize != sizeof(DELETE_SECTOR_INFO)) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_GETINFO:
            if (pOutBuf == NULL || OutBufSize != sizeof(DISK_INFO)) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_GET_STORAGEID:
            // the identification data is stored after the struct, so the out
            // buffer must be at least the size of the struct.
            if (pOutBuf == NULL || OutBufSize < sizeof(STORAGE_IDENTIFICATION)) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_FORMAT_MEDIA:
        case DISK_IOCTL_FORMAT_MEDIA:
            break;

        case IOCTL_DISK_DEVICE_INFO:
            if (NULL == pInBuf || (InBufSize != sizeof(STORAGEDEVICEINFO))) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_POWER_CAPABILITIES:
            if (!pOutBuf || OutBufSize < sizeof(POWER_CAPABILITIES) || !pBytesReturned) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_POWER_SET:
            if (!pOutBuf || OutBufSize < sizeof(CEDEVICE_POWER_STATE) || !pBytesReturned) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        default:
            Status = ERROR_INVALID_PARAMETER;
    }

    if (Status != ERROR_SUCCESS) {
        goto ErrorStatusReturn;
    }

    // execute the IOCTL
    switch(IoctlCode) {

        case IOCTL_DISK_READ:
        case DISK_IOCTL_READ:
            pSG = (PSG_REQ)pInBuf;
            if (0 == CeSafeCopyMemory((LPVOID)pHandle->pSterileIoRequest, (LPVOID)pSG, InBufSize)) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            Status = SDMemRead(pHandle, pHandle->pSterileIoRequest);
            __try {
                pSG->sr_status = Status;
                if (pBytesReturned && (ERROR_SUCCESS == Status)) {
                    *pBytesReturned = (pHandle->pSterileIoRequest->sr_num_sec * SD_BLOCK_SIZE);
                }
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_WRITE:
        case DISK_IOCTL_WRITE:
            pSG = (PSG_REQ)pInBuf;
            if (0 == CeSafeCopyMemory((LPVOID)pHandle->pSterileIoRequest, (LPVOID)pSG, InBufSize)) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            Status = SDMemWrite(pHandle, pHandle->pSterileIoRequest);
            __try {
                pSG->sr_status = Status;
                if (pBytesReturned && (ERROR_SUCCESS == Status)) {
                    *pBytesReturned = (pHandle->pSterileIoRequest->sr_num_sec * SD_BLOCK_SIZE);
                }
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                Status = ERROR_INVALID_PARAMETER;
            }
            break;

        case IOCTL_DISK_GETINFO:
        {
            DISK_INFO SafeDiskInfo = {0};
            SafeBytesReturned = sizeof(DISK_INFO);
            Status = GetDiskInfo(pHandle, &SafeDiskInfo);
            if (0 == CeSafeCopyMemory((LPVOID)pOutBuf, (LPVOID)&SafeDiskInfo, sizeof(DISK_INFO))) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            if (pBytesReturned) {
                if (0 == CeSafeCopyMemory((LPVOID)pBytesReturned, (LPVOID)&SafeBytesReturned, sizeof(DWORD))) {
                    Status = ERROR_INVALID_PARAMETER;
                    break;
                }
            }
        }
            break;

        case DISK_IOCTL_GETINFO:
        {
            DISK_INFO SafeDiskInfo = {0};
            SafeBytesReturned = sizeof(DISK_INFO);
            Status = GetDiskInfo(pHandle, &SafeDiskInfo);
            if (0 == CeSafeCopyMemory((LPVOID)pInBuf, (LPVOID)&SafeDiskInfo, sizeof(DISK_INFO))) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            if (pBytesReturned) {
                if (0 == CeSafeCopyMemory((LPVOID)pBytesReturned, (LPVOID)&SafeBytesReturned, sizeof(DWORD))) {
                    Status = ERROR_INVALID_PARAMETER;
                    break;
                }
            }
        }
            break;

        case IOCTL_DISK_SETINFO:
        {
            DISK_INFO SafeDiskInfo = {0};
            if (0 == CeSafeCopyMemory((LPVOID)&SafeDiskInfo, (LPVOID)pInBuf, sizeof(DISK_INFO))) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            Status = SetDiskInfo(pHandle, &SafeDiskInfo);
        }
            break;

        case IOCTL_DISK_FORMAT_MEDIA:
        case DISK_IOCTL_FORMAT_MEDIA:
            Status = ERROR_SUCCESS;
            break;

        case IOCTL_DISK_GET_STORAGEID:
        {
            __try {
                Status = GetStorageID(
                    pHandle,
                    (PSTORAGE_IDENTIFICATION)pOutBuf,
                    OutBufSize,
                    pBytesReturned);
            }
            __except(EXCEPTION_EXECUTE_HANDLER) {
                Status = ERROR_INVALID_PARAMETER;
            }
        }
            break;

        case IOCTL_DISK_DEVICE_INFO:
        {
            STORAGEDEVICEINFO SafeStorageDeviceInfo = {0};
            SafeBytesReturned = sizeof(STORAGEDEVICEINFO);
            if (!GetDeviceInfo(pHandle, &SafeStorageDeviceInfo)) {
                Status = ERROR_GEN_FAILURE;
                break;
            }
            if (0 == CeSafeCopyMemory((LPVOID)pInBuf, (LPVOID)&SafeStorageDeviceInfo, sizeof(STORAGEDEVICEINFO))) {
                Status = ERROR_INVALID_PARAMETER;
                break;
            }
            Status = ERROR_SUCCESS;
            if (pBytesReturned) {
                if (0 == CeSafeCopyMemory((LPVOID)pBytesReturned, (LPVOID)&SafeBytesReturned, sizeof(DWORD))) {
                    Status = ERROR_INVALID_PARAMETER;
                }
            }
        }
            break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情在线播放| 91麻豆123| 色综合天天视频在线观看| 日韩欧美另类在线| 一级日本不卡的影视| 国产成人欧美日韩在线电影| 欧美日韩dvd在线观看| 国产精品久久久久一区二区三区 | 久热成人在线视频| 色播五月激情综合网| 国产精品三级电影| 久久精品国产精品青草| 欧美日韩国产bt| 一区二区三区在线观看国产| 国产91精品久久久久久久网曝门| 日韩一区二区在线观看视频播放| 亚洲午夜视频在线| 色综合久久综合| 国产精品国产成人国产三级 | 全国精品久久少妇| 欧美性色欧美a在线播放| 亚洲精品国产一区二区精华液| 北条麻妃国产九九精品视频| 国产亚洲欧洲997久久综合| 麻豆久久久久久| 91精品国产综合久久婷婷香蕉 | 国产精品久久久久婷婷| 国产凹凸在线观看一区二区| 精品国产1区二区| 久久不见久久见免费视频1| 欧美电视剧免费全集观看 | 亚洲国产成人精品视频| 一本久道中文字幕精品亚洲嫩| 亚洲美腿欧美偷拍| 色婷婷激情久久| 一区二区三区高清不卡| 欧美性猛交xxxx黑人交| 一区二区三区中文字幕在线观看| 91成人免费电影| 亚洲成av人片| 精品久久国产字幕高潮| 国产乱人伦偷精品视频免下载 | 精品国产电影一区二区| 国产一区二区h| 中文字幕一区二区视频| 欧美四级电影网| 麻豆国产精品视频| 久久精品视频免费| 色乱码一区二区三区88| 免费看黄色91| 国产日韩av一区| 在线精品视频一区二区三四 | 日韩欧美国产一二三区| 国产不卡在线视频| 亚洲一区二区在线播放相泽 | 日韩美女视频一区| 欧美日韩免费不卡视频一区二区三区 | 久久九九影视网| 色综合天天综合色综合av| 亚洲sss视频在线视频| 欧美电视剧在线观看完整版| 99久久国产综合精品色伊| 亚洲制服丝袜av| 国产亚洲综合性久久久影院| 91女厕偷拍女厕偷拍高清| 琪琪久久久久日韩精品| 国产精品久久久久国产精品日日| 欧美日韩一区二区在线观看| 国产激情精品久久久第一区二区| 一区二区三区在线观看国产| 26uuu精品一区二区在线观看| 99亚偷拍自图区亚洲| 日本va欧美va瓶| 亚洲色欲色欲www在线观看| 欧美一区二区三区在线| 91在线云播放| 国产在线播精品第三| 亚洲影院理伦片| 国产午夜精品福利| 日韩欧美激情四射| 欧美午夜精品免费| 丁香啪啪综合成人亚洲小说| 喷水一区二区三区| 一区二区三区电影在线播| 国产欧美在线观看一区| 精品卡一卡二卡三卡四在线| 欧美在线观看一区| av在线不卡观看免费观看| 国产福利91精品| 久久99国产精品免费网站| 五月天网站亚洲| 亚洲第一av色| 亚洲精品成人少妇| 中文字幕一区二区视频| 亚洲国产成人在线| 欧美精品一区二区在线播放| 欧美高清视频不卡网| 色94色欧美sute亚洲线路二| 91玉足脚交白嫩脚丫在线播放| 国产成人8x视频一区二区| 国产一区二区三区免费播放| 免播放器亚洲一区| 欧美aaaaaa午夜精品| 日韩av在线发布| 日本一不卡视频| 青草国产精品久久久久久| 丝袜亚洲另类丝袜在线| 亚洲18女电影在线观看| 亚洲一区视频在线观看视频| 亚洲美女电影在线| 亚洲视频一二区| 亚洲男同1069视频| 亚洲精品写真福利| 一区二区三区欧美视频| 亚洲欧美日本在线| 亚洲精品综合在线| 视频一区视频二区在线观看| 午夜影院久久久| 久久99精品国产.久久久久久 | 久久久亚洲精品石原莉奈| 久久一二三国产| 国产精品天干天干在线综合| 1024亚洲合集| 性做久久久久久久久| 免费三级欧美电影| 国产精品一区二区无线| www.欧美亚洲| 欧美在线999| 日韩一区二区三区高清免费看看| 日韩一区二区高清| www国产精品av| 亚洲欧洲日韩在线| 亚洲一二三四区| 久久成人av少妇免费| 成人免费高清视频| 欧美视频三区在线播放| 欧美xxxx在线观看| 亚洲免费资源在线播放| 亚洲成a人在线观看| 国产一二精品视频| 91免费视频大全| 欧美一区二区视频免费观看| 国产人成亚洲第一网站在线播放 | 国产精品美女久久久久久久久| 亚洲色图在线播放| 日韩国产欧美在线播放| 国产精品99久久久久久久女警| 91免费观看在线| 欧美成人官网二区| ●精品国产综合乱码久久久久| 日韩av一级电影| 99精品国产91久久久久久 | 欧美日韩亚洲国产综合| 精品国产污网站| 亚洲精品日日夜夜| 国产黄人亚洲片| 欧美精品久久一区二区三区| 日本一区二区在线不卡| 亚洲超碰97人人做人人爱| 国产91精品露脸国语对白| 欧美高清视频一二三区| 自拍偷拍亚洲综合| 国产一区美女在线| 欧美日韩国产小视频| 国产亲近乱来精品视频| 全部av―极品视觉盛宴亚洲| 99久久婷婷国产综合精品电影| 日韩女优av电影在线观看| 一区二区不卡在线播放 | 韩国三级中文字幕hd久久精品| 91在线无精精品入口| 精品国产百合女同互慰| 五月综合激情日本mⅴ| 成人激情免费网站| 久久人人超碰精品| 六月丁香婷婷久久| 8x8x8国产精品| 亚洲在线视频网站| 91麻豆国产福利精品| 欧美激情综合网| 国产激情视频一区二区三区欧美| 欧美一区国产二区| 午夜精品久久久久影视| 一本到不卡精品视频在线观看| 国产精品污污网站在线观看| 国产一区二区三区久久久 | 精品视频色一区| 亚洲精品视频免费看| 一本一道久久a久久精品综合蜜臀| 久久精品夜色噜噜亚洲aⅴ| 国内外成人在线| 久久久蜜桃精品| 国产精品亚洲一区二区三区在线| 日韩欧美中文一区二区| 日本va欧美va精品| 日韩欧美亚洲国产另类| 免费观看91视频大全| 精品日韩在线观看| 国产乱码精品一品二品| 久久久国际精品|