青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

若我的小家

-編程,讀書,感悟,旅游,設(shè)計(jì)
posts - 21, comments - 0, trackbacks - 0, articles - 0

Q 在NT/2000/XP中,我想用VC編寫應(yīng)用程序訪問(wèn)硬件設(shè)備,如獲取磁盤參數(shù)、讀寫絕對(duì)扇區(qū)數(shù)據(jù)、測(cè)試光驅(qū)實(shí)際速度等,該從哪里入手呢?

A 在NT/2000/XP中,應(yīng)用程序可以通過(guò)API函數(shù)DeviceIoControl來(lái)實(shí)現(xiàn)對(duì)設(shè)備的訪問(wèn)—獲取信息,發(fā)送命令,交換數(shù)據(jù)等。利用該接口函數(shù)向指定的設(shè)備驅(qū)動(dòng)發(fā)送正確的控制碼及數(shù)據(jù),然后分析它的響應(yīng),就可以達(dá)到我們的目的。

DeviceIoControl的函數(shù)原型為

BOOL DeviceIoControl(
HANDLE hDevice,              // 設(shè)備句柄
DWORD dwIoControlCode,       // 控制碼
LPVOID lpInBuffer,           // 輸入數(shù)據(jù)緩沖區(qū)指針
DWORD nInBufferSize,         // 輸入數(shù)據(jù)緩沖區(qū)長(zhǎng)度
LPVOID lpOutBuffer,          // 輸出數(shù)據(jù)緩沖區(qū)指針
DWORD nOutBufferSize,        // 輸出數(shù)據(jù)緩沖區(qū)長(zhǎng)度
LPDWORD lpBytesReturned,     // 輸出數(shù)據(jù)實(shí)際長(zhǎng)度單元長(zhǎng)度
LPOVERLAPPED lpOverlapped    // 重疊操作結(jié)構(gòu)指針
);

設(shè)備句柄用來(lái)標(biāo)識(shí)你所訪問(wèn)的設(shè)備。

發(fā)送不同的控制碼,可以調(diào)用設(shè)備驅(qū)動(dòng)程序的不同類型的功能。在頭文件winioctl.h中,預(yù)定義的標(biāo)準(zhǔn)設(shè)備控制碼,都以IOCTL或FSCTL開(kāi)頭。例如,IOCTL_DISK_GET_DRIVE_GEOMETRY是對(duì)物理驅(qū)動(dòng)器取結(jié)構(gòu)參數(shù)(介質(zhì)類型、柱面數(shù)、每柱面磁道數(shù)、每磁道扇區(qū)數(shù)等)的控制碼,F(xiàn)SCTL_LOCK_VOLUME是對(duì)邏輯驅(qū)動(dòng)器的卷加鎖的控制碼。

輸入輸出數(shù)據(jù)緩沖區(qū)是否需要,是何種結(jié)構(gòu),以及占多少字節(jié)空間,完全由不同設(shè)備的不同操作類型決定。在頭文件winioctl.h中,已經(jīng)為標(biāo)準(zhǔn)設(shè)備預(yù)定義了一些輸入輸出數(shù)據(jù)結(jié)構(gòu)。重疊操作結(jié)構(gòu)指針設(shè)置為NULL,DeviceIoControl將進(jìn)行阻塞調(diào)用;否則,應(yīng)在編程時(shí)按異步操作設(shè)計(jì)。

Q 設(shè)備句柄是從哪里獲得的?

A 設(shè)備句柄可以用API函數(shù)CreateFile獲得。它的原型為

HANDLE CreateFile(
LPCTSTR lpFileName,                         // 文件名/設(shè)備路徑
DWORD dwDesiredAccess,                      // 訪問(wèn)方式
DWORD dwShareMode,                          // 共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 安全描述符指針
DWORD dwCreationDisposition,                // 創(chuàng)建方式
DWORD dwFlagsAndAttributes,                 // 文件屬性及標(biāo)志
HANDLE hTemplateFile                        // 模板文件的句柄
);

CreateFile這個(gè)函數(shù)用處很多,這里我們用它“打開(kāi)”設(shè)備驅(qū)動(dòng)程序,得到設(shè)備的句柄。操作完成后用CloseHandle關(guān)閉設(shè)備句柄。

與普通文件名有所不同,設(shè)備驅(qū)動(dòng)的“文件名”(常稱為“設(shè)備路徑”)形式固定為“\\.\DeviceName”(注意在C程序中該字符串寫法為“\\\\.\\DeviceName”),DeviceName必須與設(shè)備驅(qū)動(dòng)程序內(nèi)定義的設(shè)備名稱一致。

一般地,調(diào)用CreateFile獲得設(shè)備句柄時(shí),訪問(wèn)方式參數(shù)設(shè)置為0或GENERIC_READ|GENERIC_WRITE,共享方式參數(shù)設(shè)置為FILE_SHARE_READ|FILE_SHARE_WRITE,創(chuàng)建方式參數(shù)設(shè)置為OPEN_EXISTING,其它參數(shù)設(shè)置為0或NULL。

Q 可是,我怎么知道設(shè)備名稱是什么呢?

A 一些存儲(chǔ)設(shè)備的名稱是微軟定義好的,不可能有什么變化。大體列出如下
軟盤驅(qū)動(dòng)器 A:, B:
硬盤邏輯分區(qū) C:, D:, E:, ...
物理驅(qū)動(dòng)器 PHYSICALDRIVEx
CD-ROM, DVD/ROM CDROMx
磁帶機(jī) TAPEx

其中,物理驅(qū)動(dòng)器不包括軟驅(qū)和光驅(qū)。邏輯驅(qū)動(dòng)器可以是IDE/SCSI/PCMCIA/USB接口的硬盤分區(qū)(卷)、光驅(qū)、MO、CF卡等,甚至是虛擬盤。x=0,1,2 ……

其它的設(shè)備名稱需通過(guò)驅(qū)動(dòng)接口的GUID調(diào)用設(shè)備管理函數(shù)族取得,這里暫不討論。

Q 請(qǐng)舉一個(gè)簡(jiǎn)單的例子說(shuō)明如何通過(guò)DeviceIoControl訪問(wèn)設(shè)備驅(qū)動(dòng)程序。

A 這里有一個(gè)從MSDN上摘抄來(lái)的demo程序,演示在NT/2000/XP中如何通過(guò)DeviceIoControl獲取硬盤的基本參數(shù)。

/* The code of interest is in the subroutine GetDriveGeometry. The
                code in main shows how to interpret the results of the IOCTL call. */
                #include <windows.h>
                #include <winioctl.h>
                BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
                {
                HANDLE hDevice;               // handle to the drive to be examined
                BOOL bResult;                 // results flag
                DWORD junk;                   // discard results
                hDevice = CreateFile("\\\\.\\PhysicalDrive0",  // drive to open
                0,                // no access to the drive
                FILE_SHARE_READ | // share mode
                FILE_SHARE_WRITE,
                NULL,             // default security attributes
                OPEN_EXISTING,    // disposition
                0,                // file attributes
                NULL);            // do not copy file attributes
                if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
                {
                return (FALSE);
                }
                bResult = DeviceIoControl(hDevice,     // device to be queried
                IOCTL_DISK_GET_DRIVE_GEOMETRY,     // operation to perform
                NULL, 0,               // no input buffer
                pdg, sizeof(*pdg),     // output buffer
                &junk,                 // # bytes returned
                (LPOVERLAPPED) NULL);  // synchronous I/O
                CloseHandle(hDevice);
                return (bResult);
                }
                int main(int argc, char *argv[])
                {
                DISK_GEOMETRY pdg;            // disk drive geometry structure
                BOOL bResult;                 // generic results flag
                ULONGLONG DiskSize;           // size of the drive, in bytes
                bResult = GetDriveGeometry (&pdg);
                if (bResult)
                {
                printf("Cylinders = %I64d\n", pdg.Cylinders);
                printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
                printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);
                printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);
                DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
                (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
                printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize,
                DiskSize / (1024 * 1024));
                }
                else
                {
                printf("GetDriveGeometry failed. Error %ld.\n", GetLastError());
                }
                return ((int)bResult);
                }
                

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情视频在线免费观看 欧美视频免费一| 国产精品久久久99| 亚洲激情偷拍| 欧美jjzz| 亚洲日本aⅴ片在线观看香蕉| 欧美激情第一页xxx| 亚洲国产黄色| 中文成人激情娱乐网| 亚洲欧美区自拍先锋| 久久精品1区| 欧美激情中文字幕乱码免费| 欧美日韩国产成人| 国产乱码精品一区二区三区av | 久久婷婷av| 欧美激情亚洲| 一区二区三区日韩| 久久久久九九视频| 欧美色一级片| 狠狠色狠色综合曰曰| 一区二区三区日韩精品| 欧美一级二区| 亚洲国产精品999| 亚洲在线国产日韩欧美| 中文日韩在线| 久久一区二区三区国产精品| 亚洲第一色中文字幕| 亚洲视频1区| 久久人人超碰| 国产精品第一页第二页第三页| 韩国精品在线观看| 亚洲天堂第二页| 欧美成人午夜激情视频| 亚洲午夜精品视频| 欧美凹凸一区二区三区视频| 国产精品人人做人人爽 | 国产亚洲va综合人人澡精品| 亚洲区第一页| 久久亚洲色图| 国产精品99久久久久久人| 榴莲视频成人在线观看| 国产女优一区| 中日韩男男gay无套| 久久久午夜精品| 亚洲午夜精品福利| 欧美日韩精品系列| 亚洲国产视频a| 久久久久久免费| 制服诱惑一区二区| 嫩草国产精品入口| 伊人成人在线视频| 久久久国产精品一区| 亚洲性感激情| 国产精品红桃| 亚洲一区二区精品| 99国产精品久久久久久久| 欧美国产亚洲另类动漫| 91久久精品美女| 免费观看成人网| 久久蜜桃香蕉精品一区二区三区| 国产亚洲人成a一在线v站| 亚洲免费视频一区二区| 一本一本a久久| 国产精品高潮呻吟| 午夜电影亚洲| 午夜精品视频在线观看| 国产情侣久久| 久久久久久尹人网香蕉| 久久精品免费电影| 亚洲国产精品一区| 亚洲国产精品一区在线观看不卡 | 一区二区三区 在线观看视| 欧美日韩国产欧美日美国产精品| 一本高清dvd不卡在线观看| 亚洲另类春色国产| 欧美日韩亚洲高清一区二区| 亚洲五月婷婷| 午夜一区在线| 美女国产一区| 亚洲精品美女在线观看播放| 亚洲国产精品一区制服丝袜| 欧美激情自拍| 午夜精品www| 欧美专区亚洲专区| 亚洲人在线视频| 99re6热只有精品免费观看 | 免费欧美视频| 欧美—级在线免费片| 亚洲一区二区少妇| 欧美在线亚洲| 日韩亚洲视频在线| 亚洲欧美电影院| 在线欧美视频| 一区二区三区日韩在线观看 | 在线一区观看| 性做久久久久久久免费看| 亚洲高清久久| 一区二区三区精品视频| 激情丁香综合| 99国产精品久久| 激情亚洲一区二区三区四区| 91久久综合| 国产一区二区欧美| 亚洲人成高清| 国产在线观看一区| 日韩视频永久免费| 黄网动漫久久久| 一本久久综合亚洲鲁鲁五月天| 国产亚洲在线观看| 日韩网站在线观看| 亚洲国产成人在线播放| 一区二区三区色| 亚洲日本国产| 久久aⅴ国产紧身牛仔裤| 亚洲午夜一区二区三区| 久久综合狠狠综合久久综青草| 亚洲午夜性刺激影院| 免费观看一区| 久久精品99国产精品酒店日本| 欧美日韩18| 亚洲大片在线观看| 精品69视频一区二区三区| 亚洲一区二区三区午夜| 99在线精品免费视频九九视| 久久久蜜臀国产一区二区| 欧美在线视频在线播放完整版免费观看 | 亚洲国产精品视频一区| 1000部精品久久久久久久久| 欧美在线免费看| 欧美夜福利tv在线| 欧美午夜剧场| 99精品国产高清一区二区 | 午夜久久久久| 国产精品理论片| a91a精品视频在线观看| 亚洲美女精品成人在线视频| 一区二区三区国产| 亚洲麻豆国产自偷在线| 久久免费视频观看| 久久久久久久久久看片| 国产日韩精品一区观看| 午夜伦欧美伦电影理论片| 欧美一区亚洲二区| 国产伦精品一区二区三区免费 | 久久精品男女| 国产一区二区三区自拍| 欧美一区二区三区免费大片| 久久av一区二区三区漫画| 国产欧美日韩中文字幕在线| 欧美一级艳片视频免费观看| 久久久99精品免费观看不卡| 好吊视频一区二区三区四区| 久久久久久婷| 亚洲国产精品福利| 在线亚洲免费| 国产伦精品一区二区三区免费| 亚洲欧美在线x视频| 久久久久久久久久久久久久一区 | 尤物在线观看一区| 美女91精品| 9色精品在线| 久久爱另类一区二区小说| 国模套图日韩精品一区二区| 美女露胸一区二区三区| 亚洲久久视频| 欧美一区二区视频免费观看| 影音先锋久久精品| 欧美日本一道本在线视频| 亚洲午夜久久久久久久久电影网| 久久视频国产精品免费视频在线| 最新亚洲电影| 欧美午夜精品久久久久免费视| 午夜精品久久久久久久99热浪潮 | 亚洲欧美在线一区二区| 免费的成人av| 亚洲在线成人精品| 一色屋精品视频在线看| 欧美日韩在线电影| 久久久精品动漫| 99视频有精品| 麻豆freexxxx性91精品| 亚洲在线一区二区| 91久久在线播放| 国产精品羞羞答答xxdd| 欧美国产第一页| 欧美中文字幕在线观看| 99视频精品在线| 亚洲电影天堂av| 久久久久久久一区二区三区| 在线午夜精品| 亚洲国产一区在线| 国产亚洲精品自拍| 国产精品护士白丝一区av| 欧美成人午夜剧场免费观看| 欧美一区二区三区日韩| 亚洲视频在线观看视频| 亚洲精品网站在线播放gif| 欧美成人一区二区| 久久天天躁狠狠躁夜夜av| 欧美一区国产二区| 亚洲一区在线看|