Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Ну тогда все просто [upd] 04.02.05 17:35 Число просмотров: 2050
Автор: amirul <Serge> Статус: The Elderman Отредактировано 04.02.05 17:40 Количество правок: 2
|
> :( ладно, шас пошарюсь в исходниках ntoskrnl, посморю > формат Section, может все просто - хэндл файла > выдрать и ObQueryNameString > хотя какой в задницу хэндл... он тогда должен был быть в > списке, возвращенном NtQerySystemInformation
lkd> dt nt!_section_object
nt!_SECTION_OBJECT
+0x000 StartingVa : Ptr32 Void
+0x004 EndingVa : Ptr32 Void
+0x008 Parent : Ptr32 Void
+0x00c LeftChild : Ptr32 Void
+0x010 RightChild : Ptr32 Void
+0x014 Segment : Ptr32 _SEGMENT_OBJECT
lkd> dt nt!_segment
nt!_SEGMENT
+0x000 ControlArea : Ptr32 _CONTROL_AREA
+0x004 TotalNumberOfPtes : Uint4B
+0x008 NonExtendedPtes : Uint4B
+0x00c WritableUserReferences : Uint4B
+0x010 SizeOfSegment : Uint8B
+0x018 SegmentPteTemplate : _MMPTE
+0x01c NumberOfCommittedPages : Uint4B
+0x020 ExtendInfo : Ptr32 _MMEXTEND_INFO
+0x024 SystemImageBase : Ptr32 Void
+0x028 BasedAddress : Ptr32 Void
+0x02c u1 : __unnamed
+0x030 u2 : __unnamed
+0x034 PrototypePte : Ptr32 _MMPTE
+0x038 ThePtes : [1] _MMPTE
lkd> dt nt!_control_area
nt!_CONTROL_AREA
+0x000 Segment : Ptr32 _SEGMENT
+0x004 DereferenceList : _LIST_ENTRY
+0x00c NumberOfSectionReferences : Uint4B
+0x010 NumberOfPfnReferences : Uint4B
+0x014 NumberOfMappedViews : Uint4B
+0x018 NumberOfSubsections : Uint2B
+0x01a FlushInProgressCount : Uint2B
+0x01c NumberOfUserReferences : Uint4B
+0x020 u : __unnamed
+0x024 FilePointer : Ptr32 _FILE_OBJECT
+0x028 WaitingForDeletion : Ptr32 _EVENT_COUNTER
+0x02c ModifiedWriteCount : Uint2B
+0x02e NumberOfSystemCacheViews : Uint2B
---
Пусть тебя не смущает, что в _SECTION_OBJECT-е указан тип _SEGMENT_OBJECT, а я указал _SEGMENT. Не знаю почему но там валяется именно _SEGMENT (проверено).
Просто на всякий случай приведу
nt!_SEGMENT_OBJECT
+0x000 BaseAddress : Ptr32 Void
+0x004 TotalNumberOfPtes : Uint4B
+0x008 SizeOfSegment : _LARGE_INTEGER
+0x010 NonExtendedPtes : Uint4B
+0x014 ImageCommitment : Uint4B
+0x018 ControlArea : Ptr32 _CONTROL_AREA
+0x01c Subsection : Ptr32 _SUBSECTION
+0x020 LargeControlArea : Ptr32 _LARGE_CONTROL_AREA
+0x024 MmSectionFlags : Ptr32 _MMSECTION_FLAGS
+0x028 MmSubSectionFlags : Ptr32 _MMSUBSECTION_FLAGS
lkd> dt nt!_large_control_area
nt!_LARGE_CONTROL_AREA
+0x000 Segment : Ptr32 _SEGMENT
+0x004 DereferenceList : _LIST_ENTRY
+0x00c NumberOfSectionReferences : Uint4B
+0x010 NumberOfPfnReferences : Uint4B
+0x014 NumberOfMappedViews : Uint4B
+0x018 NumberOfSubsections : Uint2B
+0x01a FlushInProgressCount : Uint2B
+0x01c NumberOfUserReferences : Uint4B
+0x020 u : __unnamed
+0x024 FilePointer : Ptr32 _FILE_OBJECT
+0x028 WaitingForDeletion : Ptr32 _EVENT_COUNTER
+0x02c ModifiedWriteCount : Uint2B
+0x02e NumberOfSystemCacheViews : Uint2B
+0x030 StartingFrame : Uint4B
+0x034 UserGlobalList : _LIST_ENTRY
+0x03c SessionId : Uint4B
---
Как видишь разница в положении ControlArea. При этом проверено, что из _SEGMENT-а она читается правильно.
Ну а получить имя из _SECTION_OBJECT-а можно при помощи функции ObGetObjectName()
-------------------------------------
Да кстати, получить _FILE_OBJECT из HANDLE-а можно при помощи ObReferenceObjectByHandle
И еще. Все структуры даны для XP SP0. На других виндах скорее всего не поменялись - но это нуждается в проверке
|
|
|