|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 17, 2003 04:02:57 К сожалению, в XP тоже не пашет. |
|
|
Дата: Мар 18, 2003 12:46:48 Глянул под ХР - все именно так, как я и предполагал. Таблица хендлов имеет всего 6 хендлов, причем это стандартные объекты для управления процессом. Т.е. для всех процессов на этих местах те же объекты. И объекта Section среди них нет. А хендл 4 имеет KeyedEvent, который успешно и закрывается. Так что под ХР работать не будет - дырочку закрыли ;-) |
|
|
Дата: Мар 18, 2003 13:41:37 Four-F: спасибо за столь подробное объяснение. Еще пара вопросов: 1)А где можно глянуть структуру EPROCESS? Например в WINDOWS.INC от MASM32 таковой не наблюдается. 2)"Просто при загрузке образа в память работает механизм проецирования файлов" Я так думаю, что этот механизм работает в такой последовательности: сначала вызывается CreateFile(возвращается хэндл открытого файла), затем CreateFileMapping(возвращается хэндл отмэппированного файла) ну и далее со всеми остановками. Так вот "магическая команда" CloseHandle, 4 пытается использовать хэндл первой или второй ф-ии? |
|
|
Дата: Мар 18, 2003 21:47:53 EPROCESS для 2000 есть у мя в KmdKit (include\w2kundoc.inc). http://four-f.narod.ru/KmdKit10.zip http://www32.brinkster.com/fourf/KmdKit10.zip http://wasm.ru/tools/11/KmdKit10.zip Структуры недокументированы, так что все очень ОС-зависимо. Для 2000 вытащено из дебужных символов для 2000+sp2 Для XP точно не помню, вроде XP First Release Cabdidate. Для ХР вот (форматирование конечно пропало :( ) KPROCESS STRUCT ; sizeof = 06Ch Header DISPATCHER_HEADER <> ; DO_TYPE_PROCESS (0x1B) ProfileListHead LIST_ENTRY <> DirectoryTableBase DWORD 2 dup(?) ; 018h Physical address of Page Data Directory (cr3 contains the same phys address) LdtDescriptor KGDTENTRY <> ; 020h Int21Descriptor KIDTENTRY <> ; 028h IopmOffset WORD ? ; 030h Iopl BYTE ? ; 032h Unused BOOLEAN ? ; 033h ActiveProcessors DWORD ? ; 034h KernelTime DWORD ? ; ticks UserTime DWORD ? ; ticks ReadyListHead LIST_ENTRY <> ; 040h SwapListEntry SINGLE_LIST_ENTRY <> ; 048h VdmTrapcHandler PVOID ? ; 04Ch ThreadListHead LIST_ENTRY <> ; KTHREAD.ThreadListEntry ProcessLock PVOID ? ; 058h KSPIN_LOCK Affinity KAFFINITY ? ; 05Ch StackCount WORD ? ; 060h BasePriority BYTE ? ; 062h ThreadQuantum BYTE ? ; 063h AutoAlignment BOOLEAN ? ; 064h State BYTE ? ; 065h ThreadSeed BYTE ? ; 066h DisableBoost BOOLEAN ? ; 067h PowerState BYTE ? ; 068h DisableQuantum BOOLEAN ? ; 069h IdealNode BYTE ? ; 06Ah Spare BYTE ? ; 06Bh KPROCESS ENDS PKPROCESS typedef PTR KPROCESS EPROCESS STRUCT ; sizeof = 258h Pcb KPROCESS <> ; 0000h ProcessLock EX_PUSH_LOCK <> ; 006ch CreateTime LARGE_INTEGER <> ; 0070h ExitTime LARGE_INTEGER <> ; 0078h RundownProtect EX_RUNDOWN_REF <> ; 0080h UniqueProcessId DWORD ? ; 0084h ActiveProcessLinks LIST_ENTRY <> ; 0088h QuotaUsage DWORD 3 dup(?) ; 0090h QuotaPeak DWORD 3 dup(?) ; 009ch CommitCharge DWORD ? ; 00a8h PeakVirtualSize DWORD ? ; 00ach VirtualSize DWORD ? ; 00b0h SessionProcessLinks LIST_ENTRY <> ; 00b4h DebugPort PVOID ? ; 00bch ExceptionPort PVOID ? ; 00c0h ObjectTable PVOID ? ; 00c4h PTR HANDLE_TABLE Token EX_FAST_REF <> ; 00c8h WorkingSetLock FAST_MUTEX <> ; 00cch WorkingSetPage DWORD ? ; 00ech AddressCreationLock FAST_MUTEX <> ; 00f0h HyperSpaceLock DWORD ? ; 0110h ForkInProgress PVOID ? ; 0114h PTR ETHREAD HardwareTrigger DWORD ? ; 0118h VadRoot PVOID ? ; 011ch VadHint PVOID ? ; 0120h CloneRoot PVOID ? ; 0124h NumberOfPrivatePages DWORD ? ; 0128h NumberOfLockedPages DWORD ? ; 012ch Win32Process PVOID ? ; 0130h Job PVOID ? ; 0134h PTR EJOB SectionObject PVOID ? ; 0138h SectionBaseAddress PVOID ? ; 013ch QuotaBlock PVOID ? ; 0140h PTR EPROCESS_QUOTA_BLOCK WorkingSetWatch PVOID ? ; 0144h PTR PAGEFAULT_HISTORY Win32WindowStation PVOID ? ; 0148h InheritedFromUniqueProcessId PVOID ? ; 014ch LdtInformation PVOID ? ; 0150h VadFreeHint PVOID ? ; 0154h VdmObjects PVOID ? ; 0158h DeviceMap PVOID ? ; 015ch PhysicalVadList LIST_ENTRY <> ; 0160h union PageDirectoryPte HARDWARE_PTE_X86 <> ; 0168h Filler QWORD ? ; 0168h ends Session PVOID ? ; 0170h ImageFileName BYTE 16 dup(?) ; 0174h JobLinks LIST_ENTRY <> ; 0184h LockedPagesList PVOID ? ; 018ch ThreadListHead LIST_ENTRY <> ; 0190h SecurityPort PVOID ? ; 0198h PaeTop PVOID ? ; 019ch ActiveThreads DWORD ? ; 01a0h GrantedAccess DWORD ? ; 01a4h DefaultHardErrorProcessing DWORD ? ; 01a8h LastThreadExitStatus SDWORD ? ; 01ach Peb PVOID ? ; 01b0h PTR PEB PrefetchTrace EX_FAST_REF <> ; 01b4h ReadOperationCount LARGE_INTEGER <> ; 01b8h WriteOperationCount LARGE_INTEGER <> ; 01c0h OtherOperationCount LARGE_INTEGER <> ; 01c8h ReadTransferCount LARGE_INTEGER <> ; 01d0h WriteTransferCount LARGE_INTEGER <> ; 01d8h OtherTransferCount LARGE_INTEGER <> ; 01e0h CommitChargeLimit DWORD ? ; 01e8h CommitChargePeak DWORD ? ; 01ech AweInfo PVOID ? ; 01f0h SeAuditProcessCreationInfo SE_AUDIT_PROCESS_CREATION_INFO <> ; 01f4h Vm MMSUPPORT <> ; 01f8h LastFaultCount DWORD ? ; 0238h ModifiedPageCount DWORD ? ; 023ch NumberOfVads DWORD ? ; 0240h JobStatus DWORD ? ; 0244h union Flags DWORD ? ; 0248h ends ExitStatus SDWORD ? ; 024ch NextPageColor WORD ? ; 0250h SubSystemMinorVersion BYTE ? ; 0252h SubSystemMajorVersion BYTE ? ; 0253h SubSystemVersion WORD ? ; 0252h PriorityClass BYTE ? ; 0254h WorkingSetAcquiredUnsafe BYTE ? ; 0255h EPROCESS ENDS PEPROCESS typedef PTR EPROCESS Насчет хендла: У Гари Неббета есть "Example 6.2: Creating a Win32 Process" Там подробно расписано как работает CreateProcess. Этот код я проверял - работает, по крайней мере под 2000. NT::ZwOpenFile(&hFile,... NT::ZwCreateSection(&hSection,... Вот hSection как раз и равен 4. |
|
|
Дата: Мар 19, 2003 01:38:51 · Поправил: Asterix ; |
|
|
Дата: Мар 19, 2003 13:06:24 Еще раз спасибо - будем разбираться. |
|
|
Дата: Мар 30, 2003 18:37:10 |
|
|
Дата: Авг 24, 2003 04:46:23 Почитал тут на досуге Коберниченко, и подумал, а почему не сделать для самоудаления так, как работает RtlExitUserThread, описанный там. Т.е. код освобождения ресурсов и удаления положить в TEB ( он-то не удалится при UnmapViewOfFile - т.к. находится в другом месте ) и в результате мы сможем выполнять код , когда exe уже не будет спроецирован в память. Как вариант #2 можно положить код в PEB.EnvironmentStrings. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096 |