Товарищи, не дайте свихнуться пожайлуста. Пишу: IOCTL_RENAME_PROCESS equ CTL_CODE(FILE_DEVICE_UNKNOWN, 807h, METHOD_BUFFERED,FILE_READ_ACCESS) ... invoke IoGetCurrentProcess mov peProcess,eax add eax,ImageNameOffset pushad invoke DbgPrint,eax;DebugView показует 'Process Explore' ;ну ясно там обрезка до 15 символов popad invoke memcpy,eax,$CTA0("Kobila"),7 pushad mov ecx,peProcess add ecx,ImageNameOffset invoke DbgPrint,ecx ;DebugView показует 'Kobila' то есть всё Ок. popad mov status,STATUS_SUCCESS ... потом жму ctrl+alt+delete и получаю Process Explorer.exe это как? притом что недели две назад вроде всё работало. Помогите, а то скоро свихнуся сижу не могу понять в чём дело. Просто щас айса нету под рукой З.Ы.: а где можно достать структуру Eprocess для win200 SP 0,1,2,3,4 ;XP SP 0,1,2 ;win 2003 Server SP??? то есть для каждого из сервис паков линейки win2000-2003 Server?
Встречался я с такой фигней, если просто менять ImageName, то это не всегда работает, так как есть еще SE_AUDIT_PROCESS_CREATION_INFO.ImageFileName (это в XP, в 2000 нет). Чтобы корректно сменить имя процесса смотри мою статью "перехват api функций в windows nt (нулевое кольцо)". Там есть код на ассемблере для смены имени процесса под 2000 и XP. Также есть готовая Ring0 библиотека, где это все реализовано. Структуры EPROCESS для 2000 и XP смотри в атаче, от сервиспака они не зависят. _1906937506__EPROCESS.rar
Four-F Ms Rem oткуда вы выдрали струскутры епроцесс? из каких pdb? it is good! Как я понял что если я определяю тип винды, то врубаю нужную епроцесс и все данные будут по нужным смещениям? Four-F можеш кинуть сразу структуру епроцесс для ХР в асмовском формате? а то я в делфийском(или какой приаттачил Ms Rem) не сильно понимаю.
вот, тут значит появилась ну совсем непонятная проблема: Код (Text): .elseif [edi].Parameters.DeviceIoControl.IoControlCode == IOCTL_RENAME_PROCESS mov status,STATUS_INVALID_PARAMETER .if [edi].Parameters.DeviceIoControl.InputBufferLength >= 8 PROCESS_SET_INFORMATION equ 0200h mov ecx,PsProcessType mov ecx,[ecx] mov ecx,[ecx] mov eax,[esi].AssociatedIrp.SystemBuffer push dword ptr [eax] pop peProcess invoke ObReferenceObjectByPointer,peProcess,PROCESS_SET_INFORMATION,ecx,UserM ode .if eax == STATUS_SUCCESS invoke ObDereferenceObject,peProcess mov status,STATUS_UNSUCCESSFUL mov eax,[esi].AssociatedIrp.SystemBuffer mov ecx,peProcess add ecx,ImageNameOffset invoke memcpy,ecx,dword ptr [eax+4],15 .if g_dwWinVer == w_XP mov ecx,peProcess mov ecx,[ecx+01f4h] test ecx,ecx jz @End push ecx xor edx,edx mov dx,word ptr [ecx] push edx mov ecx,[ecx+4] test edx,edx jz @EndP8 test ecx,ecx jz @EndP8 invoke memcpy,addr buffer_4096,ecx,edx lea eax,buffer_4096 pop ecx add eax,ecx inc eax @@: dec eax cmp byte ptr [eax-1],'\' jnz @B mov word ptr [eax],0 mov edx,[esi].AssociatedIrp.SystemBuffer mov edx,[edx+4] lea eax,buffer_4096 xor ecx,ecx dec eax @@: inc eax cmp word ptr [eax],cx jnz @B push edx dec edx @@: inc edx cmp byte ptr [edx],cl jnz @B sub edx,[esp] mov ecx,edx pop edx push ebx @@: mov byte ptr [eax],0 inc eax mov bl,byte ptr [edx] mov byte ptr [eax],bl inc eax inc edx loop @B mov word ptr [eax],0 pop ebx mov edx,[esp] invoke RtlInitUnicodeString,edx,addr buffer_4096 pop edx invoke DbgPrint,$CTA0("%ws"),edx .endif jmp @End @EndP8: add esp,8 @End: mov status,STATUS_SUCCESS .endif .endif этот код, вместо того что бы переименовать прочто урезает имя, но DbgPrint то показует: \Device\HarddiskVolume1\radasm\Masm\Projects\Process Explorer\lapux а taskmanager показует Proce Это вообщето что? меняю уже два поля, может ещё где то надо поменять?