内核开发速查表
微软命名规则 Win32中的数据类型和标识符命名规范 变量命名 windows
内核开发知识第一讲.内核中的数据类型.重要数据结构.常用内核API函数
WINAPI返回值NASTATUS:参见:https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/ntstatus-values
NTSTATUS的值为DWORD,它一般定义为如下列式(常用的都在ntstatus.h文件中)
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#define STATUS_OBJECT_NAME_EXISTS ((NTSTATUS)0x40000000L)
#define STATUS_GUARD_PAGE_VIOLATION ((NTSTATUS)0x80000001L)
#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
可用NT_SUCCESS宏来判断是否出错,值>=0的均为成功,值<0的为有错;0x7FFFFFFF为最大正值,-1=0xFFFFFFFF,0X80000000为最小负值
//
// Status values are 32 bit values laid out as follows:
//
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
// +---+-+-------------------------+-------------------------------+
// |Sev|C| Facility | Code |
// +---+-+-------------------------+-------------------------------+
//
// where
//
// Sev - is the severity code
//
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
//
// C - is the Customer code flag
//
// Facility - is the facility code
//
// Code - is the facility's status code
//
//
// Generic test for success on any status value (non-negative numbers
// indicate success).
//
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
//
// Generic test for information on any status value.
//
#ifdef _PREFAST_
#define NT_INFORMATION(Status) (((NTSTATUS)(Status)) >= (long)0x40000000)
#else
#define NT_INFORMATION(Status) ((((ULONG)(Status)) >> 30) == 1)
#endif
//
// Generic test for warning on any status value.
//
#ifdef _PREFAST_
#define NT_WARNING(Status) (((NTSTATUS)(Status) < (long)0xc0000000))
#else
#define NT_WARNING(Status) ((((ULONG)(Status)) >> 30) == 2)
#endif
//
// Generic test for error on any status value.
//
#ifdef _PREFAST_
#define NT_ERROR(Status) (((NTSTATUS)(Status)) >= (unsigned long)0xc0000000)
#else
#define NT_ERROR(Status) ((((ULONG)(Status)) >> 30) == 3)
#endif
// end_sdfwdm
// end_wudfwdm
// end_ntoshvp
// end_windbgkd
// begin_winnt
#define APPLICATION_ERROR_MASK 0x20000000
#define ERROR_SEVERITY_SUCCESS 0x00000000
#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
#define ERROR_SEVERITY_WARNING 0x80000000
#define ERROR_SEVERITY_ERROR 0xC0000000
格式输出字符串规范
MS NtStatus 官方代码
Windows 系统错代码 windows:GetLastError错误代码
键盘VK键值列表
DbgPrint/KdPrint输出格式控制
在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉。这些输出信息可以通过DebugView对内核的监控来看到。
KdPrint is identical to the DbgPrint routine in code that is compiled in achecked build environment. This routine has no effect if compiled in a free build environment. Only kernel-mode drivers can call theKdPrint routine.
下面还是说一下他们的输出格式控制吧:
| 符号 | 格式说明符 | 类型 |
| %c, %lc | ANSI字符 | char |
| %C, %wc | 宽字符 | wchar_t |
| %d, %i | 十进制有符号整数 | int |
| %D | 十进制__int64 | __int64 |
| %L | 十六进制的LARGE_INTEGER | LARGE_INTEGER |
| %s, %ls | NULL终止的ANSI字符串 | char* |
| %S, %ws | NULL终止的宽字符串 | wchar_t* |
| %Z | ANSI_STRING字符串 | ANSI_STRING |
| %wZ | UNICODE_STRING字符串 | UNICODE_STRING |
| %u | 十进制的ULONG | ULONG |
| %x | 小写字符十六进制的ULONG | ULONG |
| %X | 大写字符十六进制的ULONG | ULONG |
| %p | 指针Pointer 32/64位 |
就那么多。根据DDK上说明,Unicode格式(%C, %S, %lc, %ls, %wc, %ws, and %wZ)只能在 IRQL = PASSIVE_LEVEL时才能使用。
需要注意 中文的 WCHAR 和 UNICODE_STRING可能会被截断打印不出来 需要转化为 CHAR 和 ANSI_STRING来
常见硬件的设备类GUID
| Class | GUID | Device Description |
|---|---|---|
| CDROM | 4D36E965-E325-11CE-BFC1-08002BE10318 | CD/DVD/Blu-ray drives |
| DiskDrive | 4D36E967-E325-11CE-BFC1-08002BE10318 | Hard drives |
| Display | 4D36E968-E325-11CE-BFC1-08002BE10318 | Video adapters |
| FDC | 4D36E969-E325-11CE-BFC1-08002BE10318 | Floppy controllers |
| FloppyDisk | 4D36E980-E325-11CE-BFC1-08002BE10318 | Floppy drives |
| HDC | 4D36E96A-E325-11CE-BFC1-08002BE10318 | Hard drive controllers |
| HIDClass | 745A17A0-74D3-11D0-B6FE-00A0C90F57DA | Some USB devices |
| 1394 | 6BDD1FC1-810F-11D0-BEC7-08002BE2092F | IEEE 1394 host controller |
| Image | 6BDD1FC6-810F-11D0-BEC7-08002BE2092F | Cameras and scanners |
| Keyboard | 4D36E96B-E325-11CE-BFC1-08002BE10318 | Keyboards |
| Modem | 4D36E96D-E325-11CE-BFC1-08002BE10318 | Modems |
| Mouse | 4D36E96F-E325-11CE-BFC1-08002BE10318 | Mice and pointing devices |
| Media | 4D36E96C-E325-11CE-BFC1-08002BE10318 | Audio and video devices |
| Net | 4D36E972-E325-11CE-BFC1-08002BE10318 | Network adapters |
| Ports | 4D36E978-E325-11CE-BFC1-08002BE10318 | Serial and parallel ports |
| SCSIAdapter | 4D36E97B-E325-11CE-BFC1-08002BE10318 | SCSI and RAID controllers |
| System | 4D36E97D-E325-11CE-BFC1-08002BE10318 | System buses, bridges, etc. |
| USB | 36FC9E60-C465-11CF-8056-444553540000 | USB host controllers and hubs |
| LegacyDriver | 8ECC055D-047F-11D1-A537-0000F8753ED1 | Non-Plug and Play Drivers |
Windows内部版本号
| Operating System | Version Number |
|---|---|
| Windows 1.0 | 1.04 |
| Windows 2.0 | 2.11 |
| Windows 3.0 | 3 |
| Windows NT 3.1 | 3.10.528 |
| Windows for Workgroups 3.11 | 3.11 |
| Windows NT Workstation 3.5 | 3.5.807 |
| Windows NT Workstation 3.51 | 3.51.1057 |
| Windows 95 | 4.0.950 |
| Windows NT Workstation 4.0 | 4.0.1381 |
| Windows 98 | 4.1.1998 |
| Windows 98 Second Edition | 4.1.2222 |
| Windows Me | 4.90.3000 |
| Windows 2000 Professional | 5.0.2195 |
| Windows XP | 5.1.2600 |
| Windows XP Professional x64 Edition | 5.2.3790 |
| Windows Server 2003 | 5.2 |
| Windows Server 2003 R2 | 5.2 |
| Windows Vista | 6.0.6000 |
| Windows Server 2008 | 6.0 |
| Windows Server 2008 R2 | 6.1 |
| Windows 7 | 6.1.7600 |
| Windows 8 | 6.2.9200 |
| Windows 10 | 10.0* |
| Windows Server 2016 | 10.0* |
| Windows 8.1 | 6.3* |
| Windows Server 2012 R2 | 6.3* |
浙公网安备 33010602011771号