Linux Device Driver (LDD)







Assembly (ARM)
  ∗ 開發環境
  ∗ hello, world!
  ∗ gpio output
  ∗ mod_timer
  ∗ gpio input
  ∗ request_irq
  ∗ softirq
  ∗ tasklet
  ∗ workqueue
  ∗ kthread
  ⊕ chrdev
    ∗ mknod
    ∗ device
    ∗ read、write
    ∗ ioctl
Assembly (MIPS)
  ∗ 開發環境
  ∗ hello, world!
C/C++
  ∗ 開發環境
  ∗ hello, world!
  ∗ gpio output
  ∗ mod_timer
  ∗ gpio input
  ∗ request_irq
  ∗ softirq
  ∗ tasklet
  ∗ workqueue
  ∗ kthread
  ⊕ chrdev
    ∗ mknod
    ∗ device
    ∗ read、write
    ∗ ioctl
pr_xxx()、dev_xxx()
cdev_add()、register_chrdev()
dma_mmap_coherent()、remap_pfn_range()
打印時間
如何替換開機圖片
如何調整fbcon的字型
如何取得系統上的Export Symbols
解決"module_put"問題
解決"unknown relocation: 10"問題




Kernel Mode Driver Framework (KMDF)







Assembly (PNP)
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ WdfDeviceIoBuffered
    ∗ WdfDeviceIoDirect(PIO)
    ∗ WdfDeviceIoDirect(DMA)
    ∗ WdfDeviceIoNeither
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
    ∗ WDF
Pascal (PNP)
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ WdfDeviceIoBuffered
    ∗ WdfDeviceIoDirect(PIO)
    ∗ WdfDeviceIoDirect(DMA)
    ∗ WdfDeviceIoNeither
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
    ∗ WDF
C/C++ (PNP)
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ WdfDeviceIoBuffered
    ∗ WdfDeviceIoDirect(PIO)
    ∗ WdfDeviceIoDirect(DMA)
    ∗ WdfDeviceIoNeither
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
    ∗ WDF
WHQL測試流程
WDFAPI定義值
淺談WDFFunctions
淺談Digital Signature、Timestamp、Certificate
如何在Pascal中取得WDFFunction和WdfDriverGlobals
解決"Failed to connect to OM"問題




Windows Driver Model (WDM)







Assembly
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)
Pascal
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)
C/C++
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ AddDevice()
  ∗ DriverUnload()
  ∗ Hello world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)
WinDbg Symbol路徑
停止Win7數位簽章檢查
停止Win10數位簽章檢查
使用私人憑證加簽驅動程式
使用Verifier驗證驅動程式
如何移除已經簽章的驅動程式
關閉WinXP數位簽章警告視窗
解決DbgView輸出訊息的問題
解決DbgView的Dbgv.sys問題
ZwQueryValueKey()使用方式
Namespace("\\.\"、"\??\")
__try __except在使用上的限制
Multi-core上的DISPATCH_LEVEL
如何使用rundll32.exe安裝驅動程式
ProbeForRead()、ProbeForWrite()
RtlQueryRegistryValues()使用方式
解決"INF does not contain digital ..."問題
解決"unresolved symbol _DriverEntry@8"問題
解決"unresolved symbol SDDL_DEVOBJ..."問題
為何ZwAllocateVirtualMemory無法配置超過0x80000000位址
如何在User Mode開啟"\Device\"下的驅動程式(非Symbolic Link)




Windows NT Driver (Legacy)







Assembly
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)
Pascal
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)
C/C++
  ∗ 開發環境
  ∗ DriverEntry()
  ∗ DriverUnload()
  ∗ Hello, world!
  ⊕ File
    ∗ IRP
    ∗ DO_BUFFERED_IO
    ∗ DO_DIRECT_IO(PIO)
    ∗ DO_DIRECT_IO(DMA)
    ∗ DO_NEITHER_IO
  ⊕ IOCTL
    ∗ IRP
    ∗ METHOD_BUFFERED
    ∗ METHOD_IN_DIRECT、METHOD_OUT_DIRECT
    ∗ METHOD_NEITHER
  ∗ Thread
  ⊕ Timer
    ∗ I/O
    ∗ DPC
  ∗ StartIO
  ∗ Queue IRP
  ∗ Cancel IRP
  ∗ Cancel-Safe IRP Queue(CSQ)




MS-DOS Device Driver (MDD)







⊕ Assembly
  ⊕ Basic
    ∗ 開發環境
    ∗ 基本觀念
    ∗ I/O Request Packet(IRP)
  ⊕ Advanced
    ⊕ Char
      ⊕ Hello, world!
    ⊕ Block
      ∗ Hello, world!