<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%BC%8F%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E6%9E%B6%E6%A7%8B</id>
	<title>核心模式驅動程式架構 - 修訂紀錄</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.taigi.ima.org.tw/w/index.php?action=history&amp;feed=atom&amp;title=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%BC%8F%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E6%9E%B6%E6%A7%8B"/>
	<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%BC%8F%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E6%9E%B6%E6%A7%8B&amp;action=history"/>
	<updated>2026-05-17T18:18:07Z</updated>
	<subtitle>本 wiki 上此頁面的修訂紀錄</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.taigi.ima.org.tw/w/index.php?title=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%BC%8F%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E6%9E%B6%E6%A7%8B&amp;diff=446506&amp;oldid=prev</id>
		<title>TaiwanTonguesApiRobot：​從 JSON 檔案批量匯入</title>
		<link rel="alternate" type="text/html" href="https://wiki.taigi.ima.org.tw/w/index.php?title=%E6%A0%B8%E5%BF%83%E6%A8%A1%E5%BC%8F%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E6%9E%B6%E6%A7%8B&amp;diff=446506&amp;oldid=prev"/>
		<updated>2025-08-23T01:18:34Z</updated>

		<summary type="html">&lt;p&gt;從 JSON 檔案批量匯入&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;核心模式驅動程式架構&amp;#039;&amp;#039;&amp;#039;（&amp;#039;&amp;#039;&amp;#039;Kernel-Mode Driver Framework&amp;#039;&amp;#039;&amp;#039;，縮寫&amp;#039;&amp;#039;&amp;#039;KMDF&amp;#039;&amp;#039;&amp;#039;）是微軟公司推出的 Windows 驅動程式基礎（Windows Driver Foundation）之一，建構 Windows XP 佮 Windows Server 兩千空三的核心模式（Kernel-Mode）驅動程式所需要的基本功能，包括著隨插隨用（PNP）、 電源管理（Power Manager）、 I / O 在列、直接記持體存取（DMA）、 Windows Management Instrumentation（WMI）佮同步的處理等的完整支援。KMDF 的設計並袂當用來取代 WDM，伊提供「Skeletal WDM」建置來代替 WDM；目前，KMDF 並無支援匯流排篩選驅動程式（Bus Filter Driver）。&lt;br /&gt;
&lt;br /&gt;
Kernel-Mode Driver Framework 目前支援下列類型的核心模式（kernel mode）驅動程式之建立矣：&lt;br /&gt;
&lt;br /&gt;
* 隨插就按呢（PNP）裝置所使用的 Function Driver。&lt;br /&gt;
* 隨插就按呢（PNP）裝置所使用的 Filter Driver。&lt;br /&gt;
* 隨插就按呢（PNP）裝置疊予堆（Stack）所使用的 Bus Driver。&lt;br /&gt;
* Windows NT 四配零型態裝置所使用的 Control 裝置驅動程式。&lt;br /&gt;
&lt;br /&gt;
KMDF 是會當重新進入程式庫（Reentrant Library）。&lt;br /&gt;
&lt;br /&gt;
==佮 WDM 的關係==&lt;br /&gt;
&lt;br /&gt;
自 Windows 兩千開始，開發驅動程式必以 WDM 為基礎的，但開發難度傷大，無法度像使用者模式應用程式開發按呢簡單。KMDF 支援驅動程式佇咧 Windows Driver Model 環境中編寫驅動程式，簡化其中的過程，猶毋過 KMDF 的設計並袂當用來取代 WDM，伊提供「Skeletal WDM」建置來代替 WDM。古早的 WDM 可支援 Windows 九十八、Windows Me、Windows 兩千和 Windows XP；至於 WDF 計劃支援 Windows XP，猶閣有更新的版本。&lt;br /&gt;
&lt;br /&gt;
KMDF 用物件為基底建立於是 WDM 架構之上。無仝的功能有無仝的物件，KMDF 佇咧實作上包含矣：&lt;br /&gt;
&lt;br /&gt;
* 隨插就按呢用佮電源管理&lt;br /&gt;
* I / O 在列&lt;br /&gt;
* 直接記持體存取（DMA）&lt;br /&gt;
* Windows Management Instrumentation（WMI）&lt;br /&gt;
* 仝步&lt;br /&gt;
&lt;br /&gt;
===驅動程式較入點===&lt;br /&gt;
&lt;br /&gt;
佇咧 Windows 作業系統當咧驅動程式的起始點攏是佇咧 DriverEntry 函式，DriveryEntry 是驅動程式的進入點（entry point）。 佇咧 DriverEntry 函式的實作內底，你需要有現化（instantiate）你的 WDFDRIVER 東西，並且告知 WDF framework 欲去佗位呼叫你的系統。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
NTSTATUS DriverEntry (&lt;br /&gt;
IN PDRIVER _ OBJECT DriverObject ,&lt;br /&gt;
IN PUNICODE _ STRING RegistryPath&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WDF \ _ DRIVER \ _ CONFIG&amp;#039;&amp;#039;&amp;#039;config ;&lt;br /&gt;
NTSTATUS status=_ S \ _ OK _ ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
KdPrint ( ( _ _ DRIVER _ NAME &amp;quot; DriverEntry Begin \ n &amp;quot; ) ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ DRIVER _ CONFIG _ INIT ( &amp;amp; config , EvtDeviceAdd ) ;&lt;br /&gt;
status=WdfDriverCreate (&lt;br /&gt;
DriverObject ,&lt;br /&gt;
RegistryPath ,&lt;br /&gt;
_ WDF \ _ NO \ _ OBJECT \ _ ATTRIBUTES _ ,&lt;br /&gt;
&amp;amp; config , / / Pointer to config structure&lt;br /&gt;
_ WDF \ _ NO \ _ HANDLE _ ) ; / / or NULL , Pointer to get WDFDRIVER handle&lt;br /&gt;
if ( T _ SUCCESS ( status ) )&lt;br /&gt;
{&lt;br /&gt;
KdPrint ( ( _ _ DRIVER _ NAME &amp;quot; WdfDriverCreate failed with status 零 x % 八 x \ n &amp;quot; , status ) ) ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
KdPrint ( ( _ _ DRIVER _ NAME &amp;quot; DriverEntry End \ n &amp;quot; ) ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
return status ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
===Add Device===&lt;br /&gt;
&lt;br /&gt;
EvtDeviceAdd 函式，佇系統發現新硬體插入去的時陣予人咻叫。這个函式共揀起來 WDF 驅動程式架構的大部份工課，EvtDeviceAdd 事件被喚起去之餘一定會帶出一个 WDFDRIVER 東西，並且指向一个 WDFDEVICE \ _ INIT 結構。咧裝置產生（device crated）進前，就先進行初初化的動作。若是 EvtDeviceAdd 執行成功，遐爾 EvtDevicePrepareHardware 是架構下一个被執行的函式，用保證趕動程式會當存取硬體。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDFSTATUS DioEvtDeviceAdd ( WDFDRIVER Driver , PWDFDEVICE _ INIT DeviceInit )&lt;br /&gt;
{&lt;br /&gt;
WDFSTATUS status=STATUS _ SUCCESS ;&lt;br /&gt;
WDF _ PNPPOWER _ EVENT _ CALLBACKS pnpPowerCallbacks ;&lt;br /&gt;
WDF _ OBJECT _ ATTRIBUTES objAttributes ;&lt;br /&gt;
WDFDEVICE device ;&lt;br /&gt;
PDIO _ DEVICE _ CONTEXT devContext ;&lt;br /&gt;
WDF _ IO _ QUEUE _ CONFIG ioCallbacks ;&lt;br /&gt;
WDF _ INTERRUPT _ CONFIG interruptConfig ;&lt;br /&gt;
WDF _ DEVICE _ POWER _ POLICY _ IDLE _ SETTINGS idleSettings ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ PNPPOWER _ EVENT _ CALLBACKS _ INIT ( &amp;amp; pnpPowerCallbacks ) ;&lt;br /&gt;
pnpPowerCallbacks . EvtDevicePrepareHardware=DioEvtPrepareHardware ;&lt;br /&gt;
pnpPowerCallbacks . EvtDeviceReleaseHardware=DioEvtReleaseHardware ;&lt;br /&gt;
pnpPowerCallbacks . EvtDeviceD 零 Entry=DioEvtDeviceD 零 Entry ;&lt;br /&gt;
pnpPowerCallbacks . EvtDeviceD 零 Exit=DioEvtDeviceD 零 Exit ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WdfDeviceInitSetPnpPowerEventCallbacks ( DeviceInit , pnpPowerCallbacks ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ OBJECT _ ATTRIBUTES _ INIT ( &amp;amp; objAttributes ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ OBJECT _ ATTRIBUTES _ SET _ CONTEXT _ TYPE ( &amp;amp; objAttributes , DIO _ DEVICE _ CONTEXT ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
status=WdfDeviceInitUpdateName ( DeviceInit , L &amp;quot; \ \ device \ \ WDFDIO &amp;quot; ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
status=WdfDeviceCreate ( &amp;amp; DeviceInit , / / Device Init structure&lt;br /&gt;
&amp;amp; objAttributes , / / Attributes for WDF Device&lt;br /&gt;
&amp;amp; device ) ; / / return new WDF Device pointer ,&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
devContext=DioGetContextFromDevice ( device ) ; / / Get device extension&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
devContext-&amp;gt; WdfDevice=device ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
/ / Create a symbolic link for the control object&lt;br /&gt;
status=WdfDeviceCreateSymbolicLink ( device , L &amp;quot; \ \ DosDevices \ \ WDFDIO &amp;quot; ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ IO _ QUEUE _ CONFIG _ INIT ( &amp;amp; ioCallbacks ,&lt;br /&gt;
WdfIoQueueDispatchSerial ,&lt;br /&gt;
WDF _ NO _ EVENT _ CALLBACK , / / StartIo&lt;br /&gt;
WDF _ NO _ EVENT _ CALLBACK ) ; / / CancelRoutine&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
ioCallbacks . EvtIoDeviceControl=DioEvtDeviceControlIoctl ;&lt;br /&gt;
status=WdfDeviceCreateDefaultQueue ( device ,&lt;br /&gt;
&amp;amp; ioCallbacks ,&lt;br /&gt;
_ WDF \ _ NO \ _ OBJECT \ _ ATTRIBUTES _ ,&lt;br /&gt;
NULL ) ; / / pointer to default queue&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ INTERRUPT _ CONFIG _ INIT ( &amp;amp; interruptConfig , / / Configure the Interrupt object&lt;br /&gt;
FALSE , / / auto-queue DPC ?&lt;br /&gt;
DioIsr , / / ISR&lt;br /&gt;
DioDpc ) ; / / Defered Procedule Call&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
interruptConfig . EvtInterruptEnable=DioEvtInterruptEnable ;&lt;br /&gt;
interruptConfig . EvtInterruptDisable=DioEvtInterruptDisable ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
status=WdfInterruptCreate ( device ,&lt;br /&gt;
&amp;amp; interruptConfig ,&lt;br /&gt;
&amp;amp; objAttributes ,&lt;br /&gt;
&amp;amp; devContext-&amp;gt; WdfInterrupt ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
WDF _ DEVICE _ POWER _ POLICY _ IDLE _ SETTINGS _ INIT ( &amp;amp; idleSettings , / / Initialize idle policyIdleCannotWakeFromS 零 ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
status=WdfDeviceUpdateS 零 IdleSettings ( device , &amp;amp; idleSettings ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
return status ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
===Prepare Hardware===&lt;br /&gt;
&lt;br /&gt;
若是 EvtDeviceAdd 順利執行成功，遐爾 EvtDevicePrepareHardware 是架構下一个被執行的函式，用保證趕動程式會當存取硬體。&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
NTSTATUS EvtDevicePrepareHardware (&lt;br /&gt;
IN WDFDEVICE Device ,&lt;br /&gt;
IN WDFCMRESLIST ResourceList ,&lt;br /&gt;
IN WDFCMRESLIST ResourceListTranslated&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
NTSTATUS status=STATUS _ SUCCESS ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
UNREFERENCED _ PARAMETER ( Device ) ;&lt;br /&gt;
UNREFERENCED _ PARAMETER ( ResourceList ) ;&lt;br /&gt;
UNREFERENCED _ PARAMETER ( ResourceListTranslated ) ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
return status ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
NTSTATUS EvtDeviceD 零 Entry (&lt;br /&gt;
IN WDFDEVICE Device ,&lt;br /&gt;
IN WDF _ POWER _ DEVICE _ STATE PreviousState&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
NTSTATUS status=STATUS _ SUCCESS ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
return status ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
NTSTATUS EvtDeviceD 零 Exit (&lt;br /&gt;
IN WDFDEVICE Device ,&lt;br /&gt;
IN WDF _ POWER _ DEVICE _ STATE TargetState&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
NTSTATUS status=STATUS _ SUCCESS ;&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
return status ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
===IO requests===&lt;br /&gt;
&lt;br /&gt;
` ` `&lt;br /&gt;
VOID EvtDeviceIoDefault (&lt;br /&gt;
IN WDFQUEUE Queue ,&lt;br /&gt;
IN WDFREQUEST Request&lt;br /&gt;
)&lt;br /&gt;
{&lt;br /&gt;
WdfRequestComplete ( Request , STATUS _ NOT _ IMPLEMENTED ) ;&lt;br /&gt;
}&lt;br /&gt;
` ` `&lt;br /&gt;
&lt;br /&gt;
==外部連結==&lt;br /&gt;
&lt;br /&gt;
* Windows Driver Kit&lt;br /&gt;
* Kernel-Mode Driver Framework Homepage&lt;br /&gt;
* Microsoft KMDF Paper&lt;br /&gt;
&lt;br /&gt;
[[分類: 待校正]]&lt;/div&gt;</summary>
		<author><name>TaiwanTonguesApiRobot</name></author>
	</entry>
</feed>