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)




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
ProbeForRead()、ProbeForWrite()
RtlQueryRegistryValues()使用方式
解決"INF does not contain digital ..."問題
解決"unresolved symbol _DriverEntry@8"問題
解決"unresolved symbol SDDL_DEVOBJ..."問題
為何ZwAllocateVirtualMemory無法配置超過0x80000000位址
如何在User Mode開啟"\Device\"下的驅動程式(非Symbolic Link)




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
WDFAPI定義值
淺談WDFFunctions
如何在Pascal中取得WDFFunction和WdfDriverGlobals




Linux Device Driver (LDD)







⊕ Assembly (ARM)
  ∗ 開發環境
  ∗ hello, world!
  ∗ file
⊕ C/C++
  ∗ 開發環境
  ∗ hello, world!
打印高精度的時間
如何替換開機圖片
pr_xxx()、dev_xxx()
SDL_Flip()、SDL_UpdateRect()
SDL_SWSURFACE、SDL_HWSURFACE
cdev_add()、register_chrdev()
dma_mmap_coherent()、remap_pfn_range()
如何取得系統上的Export Symbols
如何知道SDL是否設定成SDL_DOUBLEBUF
解決"module_put"問題
解決"unknown relocation: 10"問題




MS-DOS Device Driver (MDD)







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