Структура LPCP_PORT_OBJECT для XP

Тема в разделе "WASM.NT.KERNEL", создана пользователем Twister, 5 июл 2007.

  1. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Собственно, у кого есть САБЖ? У меня есть только для 2000, а поиск ни чего не дал:
    Код (Text):
    1. typedef struct _LPCP_PORT_OBJECT {
    2.     ULONG Length;
    3.     ULONG Flags;
    4.     struct _LPCP_PORT_OBJECT *ConnectionPort;
    5.     struct _LPCP_PORT_OBJECT *ConnectedPort;
    6.     LPCP_PORT_QUEUE MsgQueue;
    7.     CLIENT_ID Creator;
    8.     PVOID ClientSectionBase;
    9.     PVOID ServerSectionBase;
    10.     PVOID PortContext;
    11.     ULONG MaxMessageLength;
    12.     ULONG MaxConnectionInfoLength;
    13.     PETHREAD ClientThread;
    14.     SECURITY_QUALITY_OF_SERVICE SecurityQos;
    15.     SECURITY_CLIENT_CONTEXT StaticSecurity;
    16.     LIST_ENTRY LpcReplyChainHead;           // Only in _COMMUNICATION ports
    17.     LIST_ENTRY LpcDataInfoChainHead;        // Only in _COMMUNICATION ports
    18.     PEPROCESS ServerProcess;                // Only in SERVER_CONNECTION ports
    19.     ULONG Reserved;
    20.     KEVENT WaitEvent ;
    21. } LPCP_PORT_OBJECT, *PLPCP_PORT_OBJECT;
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. lkd> dt _LPCP_PORT_OBJECT
    2. nt!_LPCP_PORT_OBJECT
    3.    +0x000 ConnectionPort   : Ptr32 _LPCP_PORT_OBJECT
    4.    +0x004 ConnectedPort    : Ptr32 _LPCP_PORT_OBJECT
    5.    +0x008 MsgQueue         : _LPCP_PORT_QUEUE
    6.    +0x018 Creator          : _CLIENT_ID
    7.    +0x020 ClientSectionBase : Ptr32 Void
    8.    +0x024 ServerSectionBase : Ptr32 Void
    9.    +0x028 PortContext      : Ptr32 Void
    10.    +0x02c ClientThread     : Ptr32 _ETHREAD
    11.    +0x030 SecurityQos      : _SECURITY_QUALITY_OF_SERVICE
    12.    +0x03c StaticSecurity   : _SECURITY_CLIENT_CONTEXT
    13.    +0x078 LpcReplyChainHead : _LIST_ENTRY
    14.    +0x080 LpcDataInfoChainHead : _LIST_ENTRY
    15.    +0x088 ServerProcess    : Ptr32 _EPROCESS
    16.    +0x088 MappingProcess   : Ptr32 _EPROCESS
    17.    +0x08c MaxMessageLength : Uint2B
    18.    +0x08e MaxConnectionInfoLength : Uint2B
    19.    +0x090 Flags            : Uint4B
    20.    +0x094 WaitEvent        : _KEVENT
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Спасибо!
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Так, по ходу дела возник еще вопрос. Имея объект порта необходимо получить его название, но что-то в структуре подобных полей не наблюдается. Как это реализовать? Просто есть желание найти определенный порт по названию не прибегая к вызову АПИ, манипулируя только ядерными данными...
     
  5. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Вопрос снят:
    Код (Text):
    1. POBJECT_NAME GetNameOfObject(PVOID pObject)
    2. {
    3.   POBJECT_NAME    pObjectName = NULL;
    4.   POBJECT_HEADER  pObjectHdr;
    5.  
    6.   if (_MmIsAddressValid(pObject))
    7.   {
    8.     pObjectHdr = (POBJECT_HEADER) ((PBYTE)pObject - SIZE_OF_OBJECT_HEADER);
    9.     if (_MmIsAddressValid(pObjectHdr))
    10.     {
    11.       if (pObjectHdr->SubHeaderInfo.NameOffset != 0)
    12.       {
    13.         pObjectName = (POBJECT_NAME) ((PBYTE)pObjectHdr - pObjectHdr->SubHeaderInfo.NameOffset);
    14.       }
    15.     }
    16.   }
    17.  
    18.   return pObjectName;
    19. }