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

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

宏程序

  • 驅動程序與應用程序的接口

    有兩種方式可以讓設備和應用程序之間聯系:1. 通過為設備創建的一個符號鏈;2. 通過輸出到一個接口WDM驅動程序建議使用輸出到一個接口而不推薦使用創建符號鏈的方法。這個接口保證PDO的安全,也保證安全地創建一個惟一的、獨立于語言的訪問設備的方法。一個應用程序使用Win32APIs來調用設備。在某個Win32 APIs和設備對象的分發函數之間存在一個映射關系。獲得對設備對象訪問的第一步就是打開一個設備對象的句柄。 用符號鏈打開一個設備的句柄為了打開一個設備,應用程序需要使用CreateFile。如果該設備有一個符號鏈出口,應用程序可以用下面這個例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3",  GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統本調用希望打開一個設備。這個設備必須有一個符號鏈,以便應用程序能夠打開它。有關細節查看有關Kdevice和CreateLink的內容。在上述調用中第一個參數中前綴后的部分就是這個符號鏈的名字。注意:CreatFile中的第一個參數不是Windows 98/2000中驅動程序(.sys文件)的路徑。是到設備對象的符號鏈。如果使用DriverWizard產生驅動程序,它通常使用類KunitizedName來構成設備的符號鏈。這意味著符號鏈名有一個附加的數字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應用程序需要被覆蓋的I/O,第六個參數(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個輸出接口打開句柄用這種方式打開一個句柄會稍微麻煩一些。DriverWorks庫提供兩個助手類來使獲得對該接口的訪問容易一些,這兩個類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個設備信息集,該信息集包含了特殊類中的所有設備接口信息。應用程序能有用CdeviceInterfaceClass類的一個實例來獲得一個或更多的CdeviceInterface類的實例。CdeviceInterface類是一個單一設備接口的抽象。它的成員函數DevicePath()返回一個路徑名的指針,該指針可以在CreateFile中使用來打開設備。下面用一個小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface(  GUID* pClassGuid,  DWORD instance,  PDWORD pError){  CDeviceInterfaceClass DevClass(pClassGuid, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  CDeviceInterface DevInterface(&DevClass, instance, pError);  if (*pError != ERROR_SUCCESS)    return INVALID_HANDLE_VALUE;  cout << "The device path is "    << DevInterface.DevicePath()    << endl;   HANDLE hDev;  hDev = CreateFile(   DevInterface.DevicePath(),    GENERIC_READ | GENERIC_WRITE,    FILE_SHARE_READ | FILE_SHARE_WRITE,    NULL,    OPEN_EXISTING,    FILE_ATTRIBUTE_NORMAL,    NULL  );  if (hDev == INVALID_HANDLE_VALUE)    *pError = GetLastError();  return hDev;} 在設備中執行I/O操作一旦應用程序獲得一個有效的設備句柄,它就能使用Win32 APIs來產生到設備對象的IRPs。下面的表顯示了這種對應關系。Win32 API  DRIVER_FUNCTION_xxxIRP_MJ_xxx  KDevice subclass member function CreateFile  CREATE  Create ReadFile  READ  Read WriteFile  WRITE  Write DeviceIoControl  DEVICE_CONTROL  DeviceControl CloseHandle  CLOSECLEANUP  CloseCleanUp 需要解釋一下設備類成員的Close和CleanUp:CreateFile使內核為設備創建一個新的文件對象。這使得多個句柄可以映射同一個文件對象。當這個文件對象的最后一個用戶級句柄被撤銷后,I/O管理器調用CleanUp。當沒有任何用戶級和核心級的對文件對象的訪問的時候,I/O管理器調用Close。如果被打開的設備不支持指定的功能,則調用相應的Win32將引起錯誤(無效功能)。以前為Windows95編寫的VxD的應用程序代碼中可能會在打開設備的時候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個屬性,因為它將導致沒有特權的用戶企圖打開這個設備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數轉換成IRP域的方法依賴于設備對象的屬性。當設備設置DO_DIRECT_IO標志,I/O管理器將buff鎖住在存儲器中,并且創建了一個存儲在IRP中的MDL域。一個設備可以通過調用Kirp::Mdl來存取MDL。當設備設置DO_BUFFERED_IO標志,設備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或寫操作獲得buff地址。當設備不設置DO_BUFFERED_IO標志也不設置DO_DIRECT_IO,內核設置IRP 的UserBuffer域來對應ReadFile或WriteFile中的buff參數。然而,存儲區并沒有被鎖住而且地址只對調用進程有效。驅動程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調用,buffer參數的轉換依賴于特殊的I/O控制代碼,它不在設備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構造控制代碼。這個宏的其中一個參數指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數:Method  Input Buffer Parameter  Output Buffer Parameter METHOD_BUFFERED  KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT  KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER  KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統分配一個單一的緩沖來作為輸入與輸出。驅動程序必須在向輸出緩沖放數據之前拷貝輸入數據。驅動程序通過調用KIrp::IoctlBuffer獲得緩沖地址。在完成時,I/O管理器從系統緩沖拷貝數據到提供給Ring 3級調用者使用的緩沖中。驅動程序必須在結束前存儲拷貝到IRP的Information成員中的數據個數。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數呈現不同的含義。參數InputBuffer被拷貝到一個系統緩沖,這個緩沖驅動程序可以通過調用KIrp::IoctlBuffer。參數OutputBuffer被映射到KMemory對象,驅動程序對這個對象的訪問通過調用KIrp::Mdl來實現。對于METHOD_OUT_DIRECT,調用者必須有對緩沖的寫訪問權限。注意,對METHOD_NEITHER,內核只提供虛擬地址;它不會做映射來配置緩沖。虛擬地址只對調用進程有效。這里是一個用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現在使用一個DeviceIoControl調用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING,  NULL, // no input  注意,這里放的是包含有執行操作命令的字符串指針  0, FirmwareRev,      //這里是output串指針,存放從驅動程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize,  NULL // not overlapped I/O );如果輸出緩沖足夠大,設備拷貝串到里面并將拷貝的資結束設置到FirmwareRevSize中。在驅動程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){  ULONG fwLength=0;  switch ( I.IoctlCode() )  {    case IOCTL_MYDEV_GET_FIRMWARE_REV:      fwLength = strlen(FIRMWARE_REV)+1;      if (I.IoctlOutputBufferSize() >= fwLength)      {        strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV);        I.Information() = fwLength;         return I.Complete(STATUS_SUCCESS);      }      else      {              }    case . . .   } }

    標簽: 驅動程序 應用程序 接口

    上傳時間: 2013-10-17

    上傳用戶:gai928943

  • 微機原理與匯編語言程序設計課件

    微機原理與匯編語言程序設計課件為PPT文件,內容有:第1章 基礎知識 4第2章 微型計算機系統結構 6第3章 程序加載并執行 4第4章 微處理器一般指令 6第5章 匯編語言程序設計基礎 4第6章 算術運算與邏輯運算 8第7章 基本輸入與輸出 4第8章 程序流程控制 10第9章 字符串處理 6第10章 宏  4第11章 過程 4第12章 文件處理 4第13章 模塊化程序設計 4

    標簽: 微機原理 匯編語言 程序設計

    上傳時間: 2013-10-28

    上傳用戶:yanming8525826

  • 本程序中定義的函數為y-2*x/y

    本程序中定義的函數為y-2*x/y,是使用宏來定義的。讀者可安需要行新定義函數

    標簽: 程序 定義 函數

    上傳時間: 2014-11-28

    上傳用戶:qweqweqwe

  • /*[原創]一個樹形多級菜單參考程序 這是一個用于車載電話的菜單程序,可以看成是手機功能菜單的簡化板. 我所認為的樹形多級菜單是指:在一個父菜單項目下面有多個子菜單, 子菜單下面又有多個孫菜單...,

    /*[原創]一個樹形多級菜單參考程序 這是一個用于車載電話的菜單程序,可以看成是手機功能菜單的簡化板. 我所認為的樹形多級菜單是指:在一個父菜單項目下面有多個子菜單, 子菜單下面又有多個孫菜單...,進入下層菜單主要依*當前選中的索引.有點象文件的目錄結構. 本木從前實現這類的菜單主要*分層的switch語句,每層都是一個switch.但當我看到曉奇大俠的 程序和耳朵灌滿lq等人的爭論后,那時那地,我的心境變化了,我意識到指針代表了先進的生產力, 代表了社會的發展方向,是建設和諧社會的必要條件.不管你用了多長時間C語言,只要你不善于用 一個小針指來指去,你就是那種"用嘴吃飯的高貴騎士,決不用屁股裝彈步槍"的守舊分子和社會發 展的絆腳石.(跑題太遠,刪去1萬字...打住) .言歸正傳,下面的程序適用CPU為Mega16,編譯器為CVAVR 1.24.4a 由于按鍵數目較多,所以按鍵程 序把按鍵事件分為數字鍵,快捷鍵,確認鍵,取消鍵,上下翻鍵幾類,以減小菜單結構的容量.一下菜單 數據在菜單結構數組中的偏移量,有多少個菜單象就有多少個宏定義*/

    標簽: 菜單 多級 參考程序

    上傳時間: 2013-11-28

    上傳用戶:tianyi223

  • 增加ASCII.C的一個ASCI碼(7F),用于虛擬按鍵用 修改UART串口的命令解析程序

    增加ASCII.C的一個ASCI碼(7F),用于虛擬按鍵用 修改UART串口的命令解析程序,修改RTC的pcf8563中斷部分。 精簡IIC和smart_timer代碼,添加define.h的宏定義。 修改system.c里的消息堆棧的宏定義 增加ii.c函數,支持對eeprom的打包 增加由PLD或者GPIO輸出的模擬UART,在6個CLOCK下速度為57.6K 增加消息的優先級功能,消息類型的前4位為消息的優先級,后4位為消息的類型 試用于初學單片機并且想更上一層樓的,或者有些基礎,想減少工作量的。

    標簽: ASCII ASCI UART 7F

    上傳時間: 2015-04-10

    上傳用戶:athjac

  • 此程序是用IO模擬I2C接口的驅動

    此程序是用IO模擬I2C接口的驅動,大家簡單改一下IO宏定義就可以用了

    標簽: I2C 程序 IO模擬 接口

    上傳時間: 2014-01-03

    上傳用戶:chenjjer

  • 單片機驅動3310 lcd顯示屏的c程序

    單片機驅動3310 lcd顯示屏的c程序,單片機與屏的線路連接可以參見程序中的宏定義。程序寫得很精簡,但是很好用。

    標簽: 3310 lcd 單片機驅動 顯示屏

    上傳時間: 2015-04-26

    上傳用戶:comua

  • 利用宏匯編編寫

    利用宏匯編編寫,可實現硬件中斷觸發,是一個比較好的程序

    標簽: 宏匯編 編寫

    上傳時間: 2015-05-03

    上傳用戶:遠遠ssad

  • 用匯編語言編寫的DOS下的輸入輸出宏庫

    用匯編語言編寫的DOS下的輸入輸出宏庫,可方便輸入輸出程序設計

    標簽: DOS 匯編語言 編寫 輸入輸出

    上傳時間: 2014-01-21

    上傳用戶:x4587

  • 該源程序是軟件測試作業答案。要求: 用腳本設計一個可編程的宏錄制工具

    該源程序是軟件測試作業答案。要求: 用腳本設計一個可編程的宏錄制工具,替代鼠標和鍵盤的操作,實現對畫圖程序的測試, 1 、寫出宏錄制工具的設計文檔, 2、編程實現對畫圖程序中部分菜單功能(不少于4項)的測試以及對部分繪圖工具功能(不少于兩項)的測試

    標簽: 源程序 可編程 軟件測試 腳本

    上傳時間: 2013-12-19

    上傳用戶:stampede

亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类春色国产| 麻豆久久婷婷| 在线观看视频一区二区| 日韩西西人体444www| 久久不射中文字幕| 国产日产欧产精品推荐色 | 久久精品在线观看| 国产日韩欧美不卡| 亚洲精品免费一二三区| 久久久精品国产一区二区三区| 欧美亚州一区二区三区| 激情综合色丁香一区二区| 午夜在线精品偷拍| 国产亚洲精品自拍| 久久亚洲精品一区| 亚洲国产一区二区三区高清| 欧美xart系列在线观看| 亚洲国产日韩在线| 国产精品分类| 另类酷文…触手系列精品集v1小说| 国产精品丝袜91| 久久精品一区二区三区中文字幕| 在线免费不卡视频| 国产精品久久久久久久午夜片 | 亚洲欧美日韩精品久久奇米色影视| 夜夜夜精品看看| 亚洲国产一区二区精品专区| 久久综合色播五月| 欧美另类视频在线| 亚洲免费视频网站| 亚洲人成小说网站色在线| 国产精品老牛| 欧美精品一区二区视频| 另类专区欧美制服同性| 欧美一二三视频| 亚洲欧美日韩在线高清直播| 在线视频欧美精品| 99在线精品观看| 亚洲性夜色噜噜噜7777| 一区二区毛片| 亚洲欧美精品suv| 欧美一区二区视频97| 久久国产精品久久久久久电车| 亚洲欧美日韩一区二区三区在线| 日韩午夜在线| 欧美性猛交xxxx乱大交蜜桃| 国产午夜亚洲精品理论片色戒| 中日韩高清电影网| 欧美精品一区二区久久婷婷| 一区二区视频免费在线观看| 日韩亚洲欧美成人| 久久精品国产亚洲a| 久久久999成人| 欧美日韩激情小视频| 亚洲第一免费播放区| 午夜视频在线观看一区| 午夜亚洲伦理| 午夜精品久久久久久99热| 免费日韩av电影| 欧美日韩在线视频首页| 欧美一区二区三区视频在线观看| 夜夜嗨一区二区三区| 亚洲欧美在线aaa| 麻豆精品91| 欧美激情成人在线| 欧美激情中文字幕乱码免费| 欧美77777| 欧美午夜女人视频在线| 欧美日韩一区成人| 国产综合久久久久久| 国产一区二区中文字幕免费看| 国产精品久久久久毛片大屁完整版 | 久久精品二区| 激情五月婷婷综合| 一本色道久久| 午夜精品久久久久久99热| 裸体素人女欧美日韩| 欧美日本中文字幕| 国产原创一区二区| 艳妇臀荡乳欲伦亚洲一区| 久久精品动漫| 欧美一区二区成人6969| 农夫在线精品视频免费观看| 国产精品久久一级| 国产日韩av一区二区| 这里只有精品丝袜| 欧美另类变人与禽xxxxx| 亚洲黄色影院| 欧美成人精品不卡视频在线观看 | 亚洲成色999久久网站| 性色av一区二区三区在线观看| 欧美日韩免费看| 亚洲最新视频在线播放| 欧美午夜精品久久久久久孕妇 | 欧美高清视频一区二区三区在线观看| 欧美视频日韩视频在线观看| 亚洲第一区在线观看| 久久国产色av| 国产亚洲精品一区二555| 一区二区三区日韩欧美| 欧美片在线观看| 日韩一级视频免费观看在线| 欧美日韩国产三区| 一本久道久久久| 国产亚洲精品v| 久久亚洲精品一区| 日韩视频免费看| 国产亚洲欧美aaaa| 久久免费午夜影院| 在线性视频日韩欧美| 国产一区二区三区久久久久久久久| 亚洲一区区二区| 狠狠色香婷婷久久亚洲精品| 嫩模写真一区二区三区三州| 亚洲国产成人在线视频| 久久人人爽国产| 99在线热播精品免费| 国产视频在线观看一区二区三区| 美女脱光内衣内裤视频久久影院 | 欧美α欧美αv大片| 亚洲精品视频免费| 国产精品国产| 性欧美长视频| 日韩视频在线你懂得| 欧美性大战xxxxx久久久| 亚洲无玛一区| 99亚洲一区二区| 日韩午夜在线观看视频| 国产欧美一区二区精品仙草咪| 欧美国产日本| 久久精品网址| 久久国产乱子精品免费女| 亚洲一区中文| 日韩视频在线一区| 亚洲免费福利视频| 欧美一区二区女人| 欧美中文字幕在线观看| 久久久久久久999精品视频| 麻豆精品在线视频| 久久久五月婷婷| 欧美夫妇交换俱乐部在线观看| 欧美国产日韩视频| 玖玖综合伊人| 国产精品区一区二区三| 一区二区视频免费在线观看| 红桃av永久久久| 国产一区二区三区自拍| 亚洲国产欧美在线| 久久精品久久99精品久久| 久久中文字幕导航| 欧美午夜精品久久久| 国产欧美日韩麻豆91| 亚洲国产二区| 性欧美xxxx视频在线观看| 久久婷婷人人澡人人喊人人爽| 欧美日韩三级视频| 亚洲伦理在线观看| 欧美freesex交免费视频| 国产在线乱码一区二区三区| 亚洲在线网站| 欧美婷婷六月丁香综合色| 日韩一级免费观看| 欧美午夜激情视频| 亚洲视屏一区| 国产视频精品va久久久久久| 久久精品国产久精国产思思 | 狠狠色伊人亚洲综合成人| 久久成人国产| 日韩午夜电影| 国产精品一区二区久激情瑜伽| 亚洲图中文字幕| 亚洲国产成人av| 尤妮丝一区二区裸体视频| 久久综合久久综合久久综合| 亚洲第一综合天堂另类专| 欧美大胆a视频| 亚洲字幕在线观看| 亚洲成色www8888| 国产精品第2页| 欧美成人精品高清在线播放| 亚洲第一精品夜夜躁人人爽| 欧美色播在线播放| 欧美在线电影| 一本色道久久综合精品竹菊| 国产精品一区二区在线观看不卡| 久久久高清一区二区三区| 亚洲国产欧洲综合997久久| 欧美三级第一页| 欧美国产日韩在线| 老鸭窝毛片一区二区三区| 久久久国产精品亚洲一区 | 久久成人精品无人区| 欧美成年人视频网站| 久久精品综合| 午夜在线精品偷拍| 亚洲一区二区三区免费视频| 亚洲国产黄色| 亚洲国产1区| 在线观看精品一区| 有码中文亚洲精品|