Windows Driver Model (WDM)







⊕ WDK 7.1 (C/C++)
  ⊕ Basic
    ∗ 開發環境
    ∗ DriverEntry()用途
    ∗ AddDevice()用途
    ∗ DriverUnload()用途
  ⊕ Advanced
    ∗ Hello world!
    ⊕ File Operation
      ∗ IRP用法
      ∗ DO_BUFFERED_IO用法
      ∗ DO_DIRECT_IO(PIO)用法
      ∗ DO_DIRECT_IO(DMA)用法
      ∗ DO_NEITHER_IO用法
    ⊕ IOCTL Operation
      ∗ 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)
    ∗ Hook IDT

⊕ WDK 7.1 (MASM32)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ∗ Hello world!
    ⊕ File Operation
      ∗ IRP
      ∗ DO_BUFFERED_IO
      ∗ DO_DIRECT_IO with PIO
      ∗ DO_DIRECT_IO with DMA
      ∗ DO_NEITHER_IO
    ⊕ IOCTL Operation
      ∗ 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)

⊕ WDK 10 (C/C++)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ∗ Hello world!

WinDbg Symbol路徑
停止Win7數位簽章檢查
停止Win10數位簽章檢查
使用私人憑證加簽驅動程式
使用Verifier驗證驅動程式
如何移除已經簽章的驅動程式
關閉WinXP數位簽章警告視窗
解決DbgView輸出訊息的問題
解決DbgView的Dbgv.sys問題
ZwQueryValueKey()使用方式
__try __except在使用上的限制
Multi-core上的DISPATCH_LEVEL
ProbeForRead()、ProbeForWrite()
RtlQueryRegistryValues()使用方式
解決"INF does not contain digital ..."問題
解決"unresolved symbol _DriverEntry@8"問題
解決"unresolved symbol SDDL_DEVOBJ..."問題
為何ZwAllocateVirtualMemory無法配置超過0x80000000位址
如何在User Mode開啟"\Device\"下的驅動程式(非Symbolic Link)
Namespace("\\.\"、"\??\"、"\??\GLOBALROOT\"、"\\?\"、"\GLOBAL??\"、"\Device\"、"\DosDevices\")




Kernel Mode Driver Framework (KMDF)







⊕ WDK 7.1 (C/C++)
  ⊕ PNP
    ⊕ Basic
      ∗ 開發環境
      ∗ DriverEntry
      ∗ AddDevice
    ⊕ Advanced
      ∗ Hello, world!
  ⊕ Non-PNP
    ⊕ Basic
      ∗ DriverEntry
    ⊕ Advanced
      ∗ Hello, world!
⊕ WDK 7.1 (MASM32)
  ⊕ PNP
    ⊕ Basic
      ∗ 開發環境
    ⊕ Advanced
      ∗ Hello, world!
      ⊕ File Operation
        ∗ IRP
        ∗ WdfDeviceIoBuffered
        ∗ WdfDeviceIoDirect with PIO
        ∗ WdfDeviceIoDirect with DMA
        ∗ WdfDeviceIoNeither
      ⊕ IOCTL Operation
        ∗ IRP
        ∗ METHOD_BUFFERED
        ∗ METHOD_IN_DIRECT
        ∗ METHOD_OUT_DIRECT
        ∗ METHOD_NEITHER
      ∗ Thread
      ∗ Timer
        ∗ I/O
        ∗ DPC
      ∗ Timer(WdfTimerCreate)
      ∗ Queue IRP
      ∗ Cancel IRP
⊕ WDK 10 (C/C++)
  ⊕ PNP
    ⊕ Basic
      ∗ 開發環境
    ⊕ Advanced
      ∗ Hello, world!
  ⊕ Non-PNP
    ⊕ Advanced
      ∗ Hello, world!
WDFFunctions是如何產生的
為何沒有StartIO的相關處理方式
為何沒有IRP Pending的相關處理方式




Windows NT Driver (Legacy)







⊕ WDK 7.1 (C/C++)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ∗ Hello, world!
⊕ WDK 7.1 (MASM32)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ∗ Hello, world!
⊕ WDK 7.1 (Delphi)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ∗ Hello, world!



Linux Device Driver (LDD)







⊕ C/C++
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ⊕ Char (Kernel 2.4)
      ∗ Hello, world!
      ∗ File Operation
      ∗ IOCTL
    ⊕ Char (Kernel 2.6)
      ∗ File Operation
    ⊕ Framebuffer
      ∗ register
      ∗ check var
⊕ Assembly (ARM CPU)
  ⊕ Basic
    ∗ 開發環境
  ⊕ Advanced
    ⊕ Char (Kernel 2.4)
      ∗ Hello, world!
      ∗ File Operation
      ∗ IOCTL
    ⊕ Char (Kernel 2.6)
      ∗ File Operation
打印高精度的時間
如何替換開機圖片
pr_xxx()和dev_xxx()的簡易區別
如何取得系統上的全部Export Symbols
如何知道SDL是否設定成SDL_DOUBLEBUF
SDL_Flip V.S. SDL_UpdateRect
SDL_SWSURFACE V.S. SDL_HWSURFACE
cdev_add()和register_chrdev()的差別
dma_mmap_coherent()和remap_pfn_range()的差別




MS-DOS Device Driver (MDD)







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