01.05.2000 Недокументированные функции WindozeNT [ULTRAS/MATRiX]

 -=( Функции 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