-=( Функции ntoskrnl.exe )=-
PsCreateSystemProcess.
PsCreateWin32Process.
PsLookupProcessByProcessId.
KeAddSystemServiceTable.
ZwQueryObject.
ObReferenceObjectByName.
ObQueryNameString.
ZwDisplayString.
ZwLoadDriver.
ZwUnloadDriver.
IoRegisterFileSystem.
IoUnregisterFileSystem.
KeI386AllocateGdtSelectors.
KeI386ReleaseGdtSelectors.
IoGetRequestorProcess.
ZwCreateSection.
ZwOpenProcess.
ZwOpenThread.
KeInitializeApc.
KeInsertQueueApc.
KeGetPreviousMode.
ProbeForWrite.
ZwFsControlFile.
PsCreateSystemProcess
PsCreateSystemProcess фактически создает поток в контексте ядра.
NTSYSAPI
NTSTATUS
NTAPI
PsCreateSystemProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK AccessMask,
IN OPTIONAL POBJECT_ATTRIBUTES ObjectAttributes
);
ProcessHandle - указатель на переменную типа HANDLE принимающюю
хэндл созданного процесса.
AccessMask - тип доступа к объекту.
ObjectAttributes - указатель на аттрибуты объекта.
PsCreateWin32Process
PsCreateWin32Process не делает практически ничего. Он выделяет память
через ExAllocatePoolWithQuotaTag со специальным тэгом 'Wprs' и типом 9
(не описан), затем копирует в этот блок содержимое Process, который был
передан в качестве параметра. Т.е. процесс к этому времени уже должен
быть создан как "нейтральный" и у него уже должен быть правильный
КPEB.
NTSYSAPI
NTSTATUS
NTAPI
PsCreateWin32Process(
IN PEPROCESS Process
);
Process - указатель на структуру PEPROCESS.
PsLookupProcessByProcessId
PsLookupProcessByProcessId возвращает указатель на
структуру _EPROCESS по заданному ID процесса.
NTSYSAPI
NTSTATUS
NTAPI
PsLookupProcessByProcessId(
IN ULONG ulProcId,
OUT struct _EPROCESS ** pEProcess
);
ulProcId - ID процесса.
pEProcess - адрес указателя на структуру _EPROCESS.
KeAddSystemServiceTable
KeAddSystemServiceTable - добавляет новую таблицу сервисов в ядро.
NTSYSAPI
BOOLEAN
NTAPI
KeAddSystemServiceTable(
LPSSTAT lpAddressTable,
BOOLEAN bUnknown,
ULONG dwNumEntries,
LPSSTPT lpParameterTable,
ULONG dwTableID
);
lpAddressTable - указатель на SSTAT.
bUnknown - неизвестно: всегда 0.
dwNumEntries - количество структур SSTAT.
lpParameterTable - указатель на SSTPT.
dwTableID - индекс SSD.
ZwQueryObject
ZwQueryObject - позволяет получить различную информацию об объектах ядра.
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryObject(
IN HANDLE ObjectHandle,
IN OBJECTINFOCLASS ObjectInformationClass,
OUT PVOID ObjectInformation,
IN ULONG ObjectInformationLength,
OUT PULONG LengthReturned OPTIONAL
);
ObjectHandle - хэндл объекта.
ObjectInformationClass - класс информации.
ObjectInformation - буфер куда кладется пилученная информация.
ObjectInformationLength - размер буфера.
LengthReturned - указатель на переменную принимающую реальное
количество байт, скопированных в буфер.
ObReferenceObjectByName
ObReferenceObjectByName - позволяет получить указатель на
объект по его имени.
NTSYSAPI
NTSTATUS
NTAPI
ObReferenceObjectByName(
IN PUNICODE_STRING ObjectPath,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *ObjectPtr
);
ObjectPath - путь до объекта (например: \Device\PhysicalMemory).
Attributes - могут быть или 0 или OBJ_CASE_INSENSITIVE.
PassedAccessState - .
DesiredAccess - указывает требуемый тип доступа к объекту.
ObjectType - указатель на структуру OBJECT_TYPE.
AccessMode - указывае режим доступа. Может быть UserMode или KernelMode
ParseContext - is an optional pointer that is passed uninterpreted
to any parse procedure that is called during the course of performing
the name lookup.
ObjectPtr - адрес переменной принимающей указатель на объект.
ObQueryNameString
ObQueryNameString - позволяет по указателю на объект получить
его имя.
NTSYSAPI
NTSTATUS
NTAPI
ObQueryNameString(
POBJECT Object,
PUNICODE_STRING Name,
ULONG MaximumLength,
PULONG ActualLength
);
Object - указатель на объект.
Name - указатель на UNICODE_STRING принимающей имя объекта.
MaximumLength - максимальный размер имени в байтах.
ActualLength - адрес переменной принимающей реальное
количество байт скопированных в буфер.
ZwDisplayString
ZwDisplayString - печатает строку на Blue Screen.
NTSYSAPI
NTSTATUS
NTAPI
ZwDisplayString(
PUNICODE_STRING Text
);
Text - указатель на UNICODE_STRING.
ZwLoadDriver
ZwLoadDriver - загружает драйвер.
NTSYSAPI
NTSTATUS
NTAPI
ZwLoadDriver(
IN PUNICODE_STRING DriverServiceName
);
DriverServiceName - имя загружаемого драйвера
(например: "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\MyService").
ZwUnloadDriver
ZwUnloadDriver - выгружает драйвер.
NTSYSAPI
NTSTATUS
NTAPI
ZwUnloadDriver(
IN PUNICODE_STRING DriverServiceName
);
DriverServiceName - имя выгружаемого
драйвера (например: "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\MyService").
IoRegisterFileSystem
IoRegisterFileSystem - регистрирует DeviceObject как файловую систему.
DeviceObject должен быть создан как FILE_DEVICE_DISK_FILE_SYSTEM,
FILE_DEVICE_CD_ROM_FILE_SYSTEM и т.п..
NTSYSAPI
VOID
NTAPI
IoRegisterFileSystem(
IN OUT PDEVICE_OBJECT DeviceObject
);
DeviceObject - указатель на DEVICE_OBJECT..
IoUnregisterFileSystem
IoUnregisterFileSystem - отменяет регистрирацию DeviceObject
как файловую систему.
NTSYSAPI
VOID
NTAPI
IoUnregisterFileSystem(
IN OUT PDEVICE_OBJECT DeviceObject
);
DeviceObject - указатель на DEVICE_OBJECT.
KeI386AllocateGdtSelectors
KeI386AllocateGdtSelectors - резервирует необходимое количество
селекторов в GDT.?!?
NTSYSAPI
NTSTATUS
NTAPI
KeI386AllocateGdtSelectors(
OUT PWORD SelArray,
IN int NumOfSelectors
);
SelArray - указатель на память куда будут скопированы селекторы.
NumOfSelectors - количество селекторов.
KeI386ReleaseGdtSelectors
KeI386AllocateGdtSelectors - освобождает ранее зарезервированные
селекторы в GDT.?!?
NTSYSAPI
NTSTATUS
NTAPI
KeI386ReleaseGdtSelectors(
IN OUT PWORD SelArray,
IN int NumOfSelectors
);
SelArray - массив селекторов для освобождения.
NumOfSelectors - количество селекторов.
IoGetRequestorProcess
IoGetRequestorProcess - возвращает указатель на владельца IRP.
NTSYSAPI
PEPROCESS
NTAPI
IoGetRequestorProcess(
PIRP Irp
);
Irp - указатель на IRP.
ZwCreateSection
ZwCreateSection - создает файл проецируемый в память.
NTSYSAPI
NTSTATUS
NTAPI
ZwCreateSection(
OUT PHANDLE SectionHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER MaximumSize OPTIONAL,
IN ULONG SectionPageProtection,
IN ULONG AllocationAttributes,
IN HANDLE FileHandle OPTIONAL
);
SectionHandle - адрес переменной принимающей хэндл созданной секции.
DesiredAccess - указывает требуемый тип доступа к объекту.
ObjectAttributes - указатеть на OBJECT_ATTRIBUTES. Если создается
неименованная секция то этот параметр равен 0.
MaximumSize - максимальный размер создаваемой секции.
SectionPageProtection - атрибуты защиты страниц.
AllocationAttributes - атрибуты создаваемой секции.
FileHandle - хэндл файла. Если создается секция на основе
системного страничного файла, то параметр равен 0.
ZwOpenProcess
ZwOpenProcess - получает хэндл процесса.
NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL
);
ProcessHandle - адрес переменной принимающей хэндл процесса.
DesiredAccess - указывает требуемый тип доступа к объекту.
ObjectAttributes - указатель на OBJECT_ATTRIBUTES
проинициализированной 0, кроме поля Length=sizeof(OBJECT_ATTRIBUTES).
ClientId - указатель на CLIENT_ID, в которой UniqueProcess
равен ID процесса или 0 (текущий процесс), а UniqueThread - ID потока
или 0 (текущий поток).
ZwOpenThread
ZwOpenThread - получает хэндл потока.
NTSYSAPI
NTSTATUS
NTAPI
ZwOpenThread(
OUT PHANDLE ThreadHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL
);
ThreadHandle - адрес переменной принимающей хэндл потока.
DesiredAccess - указывает требуемый тип доступа к объекту.
ObjectAttributes - указатель на OBJECT_ATTRIBUTES
проинициализированной 0, кроме поля Length=sizeof(OBJECT_ATTRIBUTES).
ClientId - указатель на CLIENT_ID, в которой UniqueProcess
равен ID процесса или 0 (текущий процесс), а UniqueThread - ID потока
или 0 (текущий поток).
KeInitializeApc
KeInitializeApc - инициализирует структуру KAPC.
NTSYSAPI
VOID // ???? NTSTATUS
NTAPI
KeInitializeApc(
OUT PKAPC Apc,
IN PKTHREAD Thread,
IN UCHAR StateIndex,
IN PKKERNEL_ROUTINE KernelRoutine,
IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL,
IN PKNORMAL_ROUTINE NormalRoutine,
IN UCHAR Mode,
PVOID Context
);
Apc - указатель на структуру KAPC.
Thread - указатель на структуру KTHREAD.
StateIndex - ???.
KernelRoutine - адрес KernelMode функции вызываемой после выполнения APC.
RundownRoutine - ???.
NormalRoutine - адрес UserMode функции для APC.
Mode - ???.
Context - ???.
KeInsertQueueApc
KeInsertQueueApc - ставит APC в очередь на исполнение.
NTSYSAPI
VOID // ???? NTSTATUS
NTAPI
KeInsertQueueApc(
IN PKAPC Apc,
IN PVOID SysArg1,
IN PVOID SysArg2,
IN UCHAR Unknown
);
Apc - указатель на структуру KAPC.
SysArg1 - адрес переменной содержащий параметр для передачи
в KernelRoutine (см. ф-ю KeInitializeApc).
SysArg2 - адрес переменной содержащий параметр для передачи
в KernelRoutine (см. ф-ю KeInitializeApc).
Unknown - ???.
KeGetPreviousMode
KeGetPreviousMode - возвращает предидущий режим процессора???.
NTSYSAPI
KPROCESSOR_MODE
NTAPI
KeGetPreviousMode(
);
ProbeForWrite
ProbeForWrite - проверяет доступность участка памяти из UserMode
на возможность записи в него.
NTSYSAPI
VOID
NTAPI
ProbeForWrite(
IN PVOID Address,
IN ULONG Length,
IN ULONG Alignment
);
Address - адрес для проверки.
Length - длина проверяемой области.
Alignment - выравнивание.
ПРИМЕР
try {
ProbeForWrite( OutputBuffer,
OutputBufferLength,
sizeof( UCHAR ));
}
except( EXCEPTION_EXECUTE_HANDLER )
{
IoStatus->Status = STATUS_INVALID_PARAMETER;
return FALSE;
}
ZwFsControlFile
ZwFsControlFile - используется для посылки FSCTL (File System Control)
комманд драйверу файловой системы.
NTSYSAPI
NTSTATUS
NTAPI
ZwFsControlFile(
IN HANDLE FileHandle,
IN HANDLE Event OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG FsControlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferLength,
IN PVOID OutputBuffer,
IN ULONG OutputBufferLength
);
FileHandle - хэндл файла.
Event - хэндл события "со сбросом вручную" для асинхронного ввода-вывода.
ApcRoutine - адрес функции завершения.
ApcContext - аргумент передаваемый в функцию завершения.
IoStatusBlock - указатель на структуру IO_STATUS_BLOCK.
FsControlCode - комманда драйверу файловой системы.
InputBuffer - указатель на буфер содержащий входные параметры для
данной комманды.
InputBufferLength - размер входного буфера.
OutputBuffer - указатель на буфер принимающий выходные данные для
данной комманды.
OutputBufferLength - размер выходного буфера.
ULTRAS[MATRiX]
What`s my age again
[email protected]
www.coderz.net/ultras
www.coderz.net/matrix
Статья для журнала Top Device
|