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

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

?? lpt.c

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? C
?? 第 1 頁 / 共 2 頁
字號:
    PUSBPRN_CONTEXT pUsbPrn,
    DWORD dwCode,
    PBYTE pBufIn,
    DWORD dwLenIn,
    PBYTE pBufOut,
    DWORD dwLenOut,
    PDWORD pdwActualOut
   )
{
   BOOL bRc = TRUE;

   DEBUGMSG(ZONE_LPT_IOCTL,(TEXT(">LPT_IOControl(0x%x, 0x%x, %d, 0x%x)\n"),
                                                               dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut ));

   if ( ACCEPT_IO( pUsbPrn ) ) {

       switch ( dwCode ) {

            case IOCTL_SERIAL_SET_TIMEOUTS:
            case IOCTL_PARALLEL_SET_TIMEOUTS:
            DEBUGMSG(ZONE_LPT_IOCTL, (TEXT("IOCTL_PARALLEL_SET_TIMEOUTS\n")));

                if ( dwLenIn >= sizeof(COMMTIMEOUTS) ) {
               LPCOMMTIMEOUTS pTimeouts;
               EnterCriticalSection(&pUsbPrn->Lock);
               pTimeouts= &pUsbPrn->Timeouts;
                   *pTimeouts = (*(LPCOMMTIMEOUTS)pBufIn);
               LeaveCriticalSection(&pUsbPrn->Lock);
            } else {
               DEBUGMSG( ZONE_ERR,(TEXT("LPT_IOControl:ERROR_INVALID_PARAMETER\n")));
                   SetLastError(ERROR_INVALID_PARAMETER);
               bRc = FALSE;
            }
                break;

        case IOCTL_SERIAL_GET_TIMEOUTS:
            case IOCTL_PARALLEL_GET_TIMEOUTS:
            DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("IOCTL_PARALLEL_GET_TIMEOUTS\n")));

                if ( (unsigned int)dwLenOut >= (unsigned int)sizeof(COMMTIMEOUTS) ) {
               LPCOMMTIMEOUTS pTimeouts;
               EnterCriticalSection(&pUsbPrn->Lock);
               pTimeouts = &pUsbPrn->Timeouts;
                   *(LPCOMMTIMEOUTS)pBufOut = *pTimeouts;
                   *pdwActualOut = sizeof(COMMTIMEOUTS);
               LeaveCriticalSection(&pUsbPrn->Lock);
            } else {
               DEBUGMSG( ZONE_ERR,(TEXT("LPT_IOControl:ERROR_INVALID_PARAMETER\n")));
                   SetLastError(ERROR_INVALID_PARAMETER);
                    *pdwActualOut = 0;
               bRc = FALSE;
            }
                break;

            case IOCTL_PARALLEL_GETDEVICEID:
            DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("IOCTL_PARALLEL_GETDEVICEID\n")));
                *pdwActualOut= GetDeviceId( pUsbPrn,
                                        pBufOut,
                                        dwLenOut );
                break;

            case IOCTL_PARALLEL_WRITE:
            DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("IOCTL_PARALLEL_WRITE\n")));
            *pdwActualOut = LPT_Write( pUsbPrn, pBufOut, dwLenOut );
            break;

         case IOCTL_PARALLEL_STATUS:
            DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("IOCTL_PARALLEL_STATUS\n")));

                if ( (unsigned int)dwLenOut < 4 ) {
               DEBUGMSG( ZONE_ERR,(TEXT("LPT_IOControl:ERROR_INVALID_PARAMETER\n")));
                   SetLastError(ERROR_INVALID_PARAMETER);
                    *pdwActualOut=0;
               bRc = FALSE;
            } else {
               //
               // Get IEEE-1284 status bits, then convert to CE LPTx status.
               //
               USHORT usStatus, usBit;
                    DWORD  dwCommErrors = CE_DNS | CE_IOE; // (Device Not Selected | I/O Error)

               usStatus = GetPortStatus( pUsbPrn );

               // walk the 1284 bits, converting to CE bits
               for ( usBit = 0x1; usBit != 0; usBit *= 2 ) {
                        switch ( usBit & usStatus ) {
                           case USBPRN_STATUS_SELECT:
                        DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("USBPRN_STATUS_SELECT\n")));
                               dwCommErrors &= ~CE_DNS;
                               break;

                           case USBPRN_STATUS_NOTERROR:
                        DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("USBPRN_STATUS_NOTERROR\n")));
                               dwCommErrors &= ~CE_IOE;
                               break;

                           case USBPRN_STATUS_PAPEREMPTY:
                        DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("USBPRN_STATUS_PAPEREMPTY\n")));
                               dwCommErrors |= CE_OOP; // Out Of Paper
                               break;

                           case USBPRN_STATUS_TIMEOUT:
                        DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("USBPRN_STATUS_TIMEOUT\n")));
                               dwCommErrors |= CE_PTO; // Printer Time Out
                               break;

                           default:
                               break;
                        }
                    }

               DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("CE LPTx Status: 0x%x\n"),dwCommErrors));

                    *(PDWORD)pBufOut = dwCommErrors;
                    *pdwActualOut = 4;
                }
            break;

            case IOCTL_PARALLEL_GET_ECP_CHANNEL32:
            DEBUGMSG( ZONE_LPT_IOCTL,(TEXT("IOCTL_PARALLEL_GET_ECP_CHANNEL32\n")));
                SetLastError(ERROR_NOT_SUPPORTED);
                bRc = FALSE;
                break;

            default:
            DEBUGMSG( ZONE_ERR,(TEXT("LPT_IOControl(0x%x) : ERROR_NOT_SUPPORTED\n"), dwCode));
                SetLastError(ERROR_NOT_SUPPORTED);
                bRc = FALSE;
                break;
      }

   } else {
      DEBUGMSG( ZONE_ERR,(TEXT("LPT_IOControl: ERROR_INVALID_HANDLE\n")));
        SetLastError(ERROR_INVALID_HANDLE);
      bRc = FALSE;
    }

   DEBUGMSG(ZONE_LPT_IOCTL,(TEXT("<LPT_IOControl:%d\n"), bRc));

   return bRc;
}


ULONG
LPT_Seek(
   PVOID Context,
   LONG  Position,
   DWORD Type
   )
{
    UNREFERENCED_PARAMETER(Context);
    UNREFERENCED_PARAMETER(Position);
    UNREFERENCED_PARAMETER(Type);
    DEBUGMSG( ZONE_LPT_INIT, (TEXT("LPT_Seek\n")));
    return (ULONG)-1;
}


BOOL
LPT_PowerUp(
   PVOID Context
   )
{
    UNREFERENCED_PARAMETER(Context);
    return 1;
}


BOOL
LPT_PowerDown(
   PVOID Context
   )
{
    UNREFERENCED_PARAMETER(Context);
    return 1;
}


PUSBPRN_CONTEXT
GetContextFromReg(
   LPTSTR  ActivePath
   )
{
   PUSBPRN_CONTEXT pUsbPrn = NULL;
   HKEY hKey;
   long lStatus;

   if (ActivePath) {
      //
      // open the registry and read out our context pointer
      // since Dev Mgr doesn't pass it in.
      //
      lStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                              ActivePath,
                              0,
                              0,
                              &hKey);

       if (lStatus==ERROR_SUCCESS) {
         DWORD dwVal;
         DWORD dwType = REG_DWORD;
         DWORD dwValLen = sizeof(dwVal);
         lStatus = RegQueryValueEx( hKey,
                                    TEXT("ClientInfo"),
                                    NULL,
                                    &dwType,
                                    (LPBYTE)(&dwVal),
                                    &dwValLen);

         if (lStatus == ERROR_SUCCESS) {
            // check the signature
            pUsbPrn = (PUSBPRN_CONTEXT)dwVal;
            if ( USB_PRN_SIG != pUsbPrn->Sig ) {
               DEBUGMSG(ZONE_ERR, (TEXT("Invalid signature!!\n")));
               TEST_TRAP();
               pUsbPrn = NULL;
            } else {
               DEBUGMSG(ZONE_LPT_INIT, (TEXT("ActivePath: %s)\n"), ActivePath));
            }
         }

         RegCloseKey(hKey);

      } else {
         DEBUGMSG(ZONE_ERR, (TEXT("Open ActivePath failed\n")));
      }
   }

   return pUsbPrn;
}


BOOL
RegisterLPTName(
   LPTSTR ActivePath,
   LPTSTR PortName
   )
{
    HKEY hKey;
    BOOL bReturn=FALSE;
    long lStatus;
    
    if (!ActivePath || !PortName) {
        DEBUGMSG(ZONE_ERR, (TEXT("Invalid parameter\n")));
        return FALSE;
    }
    
    DEBUGMSG(ZONE_LPT_INIT, (TEXT(">RegisterLPTName\n")));
    
    //
    // Open \Drivers\Active key reading our "LPTx:" device name,
    // which must then be registered under \Printers\Ports
    //
    lStatus = RegOpenKeyEx(
        HKEY_LOCAL_MACHINE,
        ActivePath,
        0,
        0,
        &hKey);
    
    if (lStatus==ERROR_SUCCESS) {
        //
        // Query our indexed file device name, e.g. "LPT1:"
        //
        TCHAR DevName[DEVNAME_LEN];
        DWORD dwType=REG_SZ;
        DWORD dwValLen = sizeof(DevName);
        lStatus = RegQueryValueEx(
            hKey,
            TEXT("Name"),
            NULL,
            &dwType,
            (PUCHAR)DevName,
            &dwValLen);
        
        if (lStatus == ERROR_SUCCESS) {
            //
            // write our device name out to the next available "PortX" value under \Printers\Ports
            //
            HKEY hPrint;
            DWORD dwDisposition;
            TCHAR portStr[MAX_PATH];
            TCHAR portName[PORTNAME_LEN];
            lStatus = RegCreateKeyEx(
                HKEY_LOCAL_MACHINE,
                g_sPortsKey,
                0,
                NULL,
                REG_OPTION_NON_VOLATILE,
                0,
                NULL,
                &hPrint,     // HKEY result
                &dwDisposition);
            
            if (lStatus==ERROR_SUCCESS) {
                DWORD dwIndex;
                for (dwIndex = 1; dwIndex < MAX_LPT_NAME_INDEX; dwIndex++) {
                    _sntprintf(portName,PORTNAME_LEN,TEXT("Port%d"),dwIndex);
                    portName[PORTNAME_LEN-1]=0;
                    dwType=REG_SZ;
                    dwValLen = sizeof(portStr);
                    lStatus = RegQueryValueEx(
                        hPrint,
                        portName,
                        NULL,
                        &dwType,
                        (PUCHAR)portStr,
                        &dwValLen);
                    if (lStatus!=ERROR_SUCCESS) {
                        break;
                    } else if(_tcsncmp(portStr, DevName, DEVNAME_LEN) == 0) {
                        // found a duplicate entry for this device, use that
                        DEBUGMSG(ZONE_INIT, 
                            (_T("RegisterLPTName: found pre-existing entry for '%s' at '%s'\r\n"),
                            DevName, portName));
                        bReturn = TRUE;
                        break;
                    }
                }
                
                // only create a new entry if necessary
                if(lStatus != ERROR_SUCCESS) {
                    ASSERT(dwIndex<MAX_LPT_NAME_INDEX);
                    dwType=REG_SZ;
                    lStatus = RegSetValueEx(
                        hPrint,
                        portName,
                        0, //NULL,
                        dwType,
                        (PUCHAR)DevName,
                        (_tcslen(DevName)+1)*sizeof(TCHAR));
                    
                    if (lStatus==ERROR_SUCCESS) {
                        // copy to caller
                        _tcsncpy(PortName,  // dst
                            portName,  // src
                            PORTNAME_LEN);  
                        bReturn=TRUE;
                        DEBUGMSG(ZONE_LPT_INIT, (TEXT("\\%s\\%s\n"),g_sPortsKey,PortName));
                    }
                }
                
                RegCloseKey(hPrint);
            }
            
        } else {
            DEBUGMSG(ZONE_ERR,(TEXT("RegisterLPTName can not get value: %s\\Name\n"),ActivePath));
        }
        
        RegCloseKey(hKey);
        
    } else {
        DEBUGMSG(ZONE_ERR,(TEXT("RegisterLPTName can not open: %s\n"),ActivePath));
    }
    
    DEBUGMSG(ZONE_LPT_INIT, (TEXT("<RegisterLPTName\n")));
    
    return bReturn;
}


BOOL
DeregisterLPTName(
   LPTSTR PortName
   )
{
   HKEY hKey;
   long lStatus;

   if (!PortName) {
      DEBUGMSG(ZONE_ERR, (TEXT("Invalid parameter\n")));
      return FALSE;
   }

   DEBUGMSG(ZONE_LPT_INIT,(TEXT("DeregisterLPTName: \\%s\\%s\n"),g_sPortsKey,PortName));

   lStatus = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                           g_sPortsKey,
                           0,
                           0,
                           &hKey);

    if (lStatus==ERROR_SUCCESS) {
        BOOL bReturn = (RegDeleteValue(hKey,PortName)==ERROR_SUCCESS);
        RegCloseKey(hKey);
        return bReturn;
    }
    else
        return FALSE;
}


//#pragma warning( push )
//#pragma warning( disable : 4706 ) // assignment within conditional expression
/*++

Populates the Registry with our Printer Driver Settings
[HKEY_LOCAL_MACHINE\Printers\<DESCRIPTION>
   "Driver"="pcl.dll"      // names the DLL that contains the printer driver
   "High Quality"="300"    // the resolution of high-quality mode
   "Draft Quality"="150

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲123区在线观看| 成人高清视频在线观看| 成人综合在线网站| 欧美久久久久中文字幕| 欧美韩日一区二区三区| 日韩国产欧美三级| 91国产免费观看| 国产精品美女一区二区| 玖玖九九国产精品| 欧美亚洲高清一区二区三区不卡| 国产欧美日本一区二区三区| 看片网站欧美日韩| 7777精品伊人久久久大香线蕉经典版下载| 国产欧美一区二区精品性色| 久久精品理论片| 欧美精品v日韩精品v韩国精品v| 中文字幕日韩一区| 成人动漫精品一区二区| 欧美激情中文字幕一区二区| 日本不卡视频在线| 这里只有精品99re| 水蜜桃久久夜色精品一区的特点| 色猫猫国产区一区二在线视频| 国产精品色在线| 成人在线视频一区| 国产精品免费视频网站| 国产精品一级在线| 国产欧美日韩视频一区二区| 国产美女精品在线| 久久欧美中文字幕| 国产91综合一区在线观看| 欧美本精品男人aⅴ天堂| 久草热8精品视频在线观看| 欧美电影免费观看高清完整版在线 | 91麻豆免费在线观看| 国产精品网站在线播放| 99久久精品国产观看| 亚洲女子a中天字幕| 精品视频资源站| 免费久久精品视频| 26uuu亚洲综合色| 大陆成人av片| 亚洲欧洲制服丝袜| 91精品婷婷国产综合久久性色 | 国产91丝袜在线18| 国产欧美日韩激情| 色婷婷精品久久二区二区蜜臂av | 国产精品91一区二区| 国产亚洲精品久| 91丨porny丨中文| 亚洲成av人片在线观看| 欧美成人精品1314www| 国产成人午夜高潮毛片| 亚洲精品高清在线| 日韩免费观看高清完整版| 国产福利精品导航| 一区二区三区国产精品| 91精品国产综合久久香蕉麻豆| 精品亚洲porn| 一区二区三区日本| 久久午夜色播影院免费高清| 91啪亚洲精品| 精东粉嫩av免费一区二区三区| 欧美韩日一区二区三区| 欧美日韩dvd在线观看| 国产黄色成人av| 天天亚洲美女在线视频| 国产色婷婷亚洲99精品小说| 欧美日韩中文另类| 国产成人啪免费观看软件| 亚洲大型综合色站| 欧美国产成人精品| 91麻豆精品国产91久久久久久久久| 国产成人精品免费视频网站| 香港成人在线视频| 亚洲欧美日韩综合aⅴ视频| 日韩欧美国产小视频| 91久久精品日日躁夜夜躁欧美| 久久97超碰色| 亚洲成人av一区二区三区| 中文字幕免费一区| 日韩欧美在线影院| 欧美日韩国产一二三| 粉嫩aⅴ一区二区三区四区五区| 天天操天天干天天综合网| 亚洲乱码国产乱码精品精小说 | 日韩电影一区二区三区| 国产精品久久久久久久久搜平片| 9191精品国产综合久久久久久| 不卡的av在线播放| 国产一区亚洲一区| 琪琪久久久久日韩精品| 亚洲图片欧美一区| 亚洲精品高清在线| 又紧又大又爽精品一区二区| 国产日韩欧美制服另类| 精品国产免费久久| 精品久久国产97色综合| 欧美一级在线观看| 在线不卡一区二区| 欧美日韩精品一区视频| 欧美视频你懂的| 91福利小视频| 欧美亚洲日本国产| 欧美自拍偷拍一区| 一本到高清视频免费精品| caoporn国产精品| 成人av在线资源| 北岛玲一区二区三区四区| 国产91在线|亚洲| 成熟亚洲日本毛茸茸凸凹| 成人综合激情网| a级精品国产片在线观看| a级高清视频欧美日韩| 99在线精品一区二区三区| 99精品视频一区二区三区| av一区二区不卡| 色综合av在线| 欧美日韩综合一区| 日韩免费一区二区| 久久精品视频一区二区三区| 中文字幕免费不卡在线| 1区2区3区精品视频| 亚洲精品一二三| 视频一区视频二区中文字幕| 免费看黄色91| 国产不卡视频在线观看| 成人ar影院免费观看视频| 在线免费亚洲电影| 9191久久久久久久久久久| www国产成人免费观看视频 深夜成人网| 久久精品视频在线免费观看| 中文字幕中文字幕一区二区| 一区二区三区日韩在线观看| 日韩高清国产一区在线| 国产精品自产自拍| 91视视频在线直接观看在线看网页在线看 | 欧美日韩视频专区在线播放| 51午夜精品国产| www国产精品av| 一区二区在线免费| 久久99精品一区二区三区三区| 国产在线视频精品一区| 色婷婷综合五月| 日韩精品一区在线| 亚洲欧洲成人av每日更新| 午夜精品爽啪视频| 国产精品一二三四五| 欧美午夜精品理论片a级按摩| 日韩精品一区二区三区在线播放 | 国产精品久久看| 三级亚洲高清视频| 成人av高清在线| 日韩欧美国产一区二区三区 | 国产亚洲精久久久久久| 亚洲男人电影天堂| 国产一区二区视频在线播放| 99精品欧美一区二区三区小说| 911精品国产一区二区在线| 国产精品久久久久久久第一福利 | 91亚洲永久精品| 精品日韩一区二区三区| 亚洲精品亚洲人成人网在线播放| 麻豆精品在线播放| 色嗨嗨av一区二区三区| 久久精品免视看| 秋霞成人午夜伦在线观看| 91在线视频免费91| 国产欧美一区二区精品性色| 蜜臀国产一区二区三区在线播放| www.日韩av| 久久久精品国产免大香伊| 免费看欧美女人艹b| 欧美优质美女网站| 亚洲日本一区二区三区| 国产不卡视频在线播放| 久久综合久久综合久久综合| 亚洲一区二区三区四区在线 | 久久久久久久久久久久久女国产乱| 一区二区三区四区在线播放| 国产成人精品aa毛片| wwww国产精品欧美| 久久国产精品第一页| 91精品国产品国语在线不卡| 亚洲国产精品欧美一二99| 色哟哟在线观看一区二区三区| 久久蜜臀中文字幕| 国产乱码精品一区二区三| 精品av综合导航| 激情文学综合网| 日韩精品一区二区三区视频 | 国产亚洲欧美日韩在线一区| 精品一二三四区| 2017欧美狠狠色| 国产高清不卡二三区| 国产色91在线| 成人小视频在线| 亚洲欧美日韩一区二区三区在线观看 | 亚洲人吸女人奶水| 99精品视频一区二区三区|