стор
2.а. С. Моляков Дослідження ядра Windows NT 5.1 на цільовій платформі Intel 3000. Систематичний пошук декларованих можливостей. Компанія Супутник +. 2006 р. - 130 стор
3.Свен Шрайбер Недокументовані можливості Windows 2000. Пітер. 2002 р. - 544 стор
. В. П. Солдатов Програмування драйверів Windows. Біном-Пресс. 2009 р. - 576 стор
. Світлана Сорокіна, Андрій Тихонов, Андрій Щербаков Програмування драйверів і систем безпеки. БХВ-Петербург. 2008 - 256стор.
. Гері Неббет Довідник з базових функцій API Windows NT/2000. ISBN 5-8459-0238-X. 2002р.- 528стр.
. Валерія Коміссарова Програмування драйверів для Windows. БХВ-Петербург. 2007р.- 256 стор
Додаток 1.
Початковий код драйверу режиму ядра, компілятор WDK, мова-С
# include PVOID * PNTPROC; DWORD (ULONG); DWORD * PDWORD; unsigned char (BYTE); BYTE * PBYTE; struct _SYSTEM_SERVICE_TABLE
{ServiceTable; CounterTable; ServiceLimit; ArgumentTable;
} _SERVICE_TABLE,
* PSYSTEM_SERVICE_TABLE,
** PPSYSTEM_SERVICE_TABLE; struct _SERVICE_DESCRIPTOR_TABLE {_SERVICE_TABLE ntoskrnl;// SST для ntoskrnl.exe_SERVICE_TABLE win32k;// SST для win32k.sys_SERVICE_TABLE unused1; _SERVICE_TABLE Unused2;
} _DESCRIPTOR_TABLE,
* PSERVICE_DESCRIPTOR_TABLE,
** PPSERVICE_DESCRIPTOR_TABLE;
# define NTCALL (_function) KeServiceDescriptorTable-> ntoskrnl.ServiceTable [_function]
# define USERCALL (_function) KeServiceDescriptorTableShadow-> win32k.ServiceTable [_function] PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable; _STRING DeviceName; _STRING SymbolicLinkName; _OBJECT deviceObject=NULL; IoThreadToProcess (
__in PETHREAD Thread
); ProtectedPid=0; NtQueryInformationThread (
__in HANDLE ThreadHandle,
__in THREADINFOCLASS ThreadInformationClass,
__inout PVOID ThreadInformation,
__in ULONG ThreadInformationLength,
__out_opt PULONG ReturnLength
); struct _THREAD_BASIC_INFORMATION {ExitStatus; TebBaseAddress; _ID ClientId; AffinityMask; Priority; BasePriority;
} THREAD_BASIC_INFORMATION, * PTHREAD_BASIC_INFORMATION; PsGetThreadProcessId (IN PETHREAD Thread); NTSTATUS (* NtOpenProcessPointer) (PHANDLE ThreadHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId); NTSTATUS (* NtOpenThreadPointer) (
__out PHANDLE ThreadHandle,
__in ACCESS_MASK DesiredAccess,
__in POBJECT_ATTRIBUTES ObjectAttributes,
__in PCLIENT_ID ClientId
); ObReferenceObjectByHandle (
__in HANDLE Handle,
__in ACCESS_MASK DesiredAccess,
__in_opt POBJECT_TYPE ObjectType,
__in KPROCESSOR_MODE AccessMode,
__out PVOID * Object,
__out_opt POBJECT_HANDLE_INFORMATION HandleInformation