Код (Text): ULONG n; HANDLE ProcessHandle=NULL; OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK res; UNICODE_STRING filename; WCHAR *stringBuffer=(PWCHAR)RtlAllocateHeap( Heap, 0, 512 ); wcscpy(stringBuffer,L"MyProcess.exe"); filename.Buffer = stringBuffer; filename.Length = sizeof(WCHAR)* wcslen (filename.Buffer); filename.MaximumLength = 512; InitializeObjectAttributes (&attr, &filename, OBJ_CASE_INSENSITIVE, 0, 0); n=ZwOpenProcess(&ProcessHandle,PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,&attr,NULL); Вот так не получается-возвращает какой-то нелепый код ошибки. Однако если открывать по PID-тогда все ок.Но мне нужно по имени
coocky в хекс переводи. это NTSTATUS а открытие по имени вроде она не поддерживает. тебе придется перечислить все процессы и найти пид по имени. потом открыть уже
хотя в мсдн написано The process object that the ZwOpenProcess method is attempting to open is located by name or by locating a thread whose client ID matches the specified client ID and then opening that thread's process.
кстати видимо дело в том, что в цепочке вызовов NtOpenProcess => ObOpenObjectByName => ObpLookupObjectName идет проверка Код (Text): // // If the name we're looking for is empty then it is malformed. // Also it has to start with a "\" or it is malformed. // if ((ObjectName->Length == 0) || (ObjectName->Buffer == NULL) || (*(ObjectName->Buffer) != OBJ_NAME_PATH_SEPARATOR)) { return( STATUS_OBJECT_PATH_SYNTAX_BAD ); } Имя объекта, видимо,полюбому должно начинаться с разделителя
Если честно то функция немного тупаватая! А что есть программ 2 раза запущенна, то какую именно она должна открывать?
гы)) Короче лучше самому перечислить процессы через ZwQuerySysInfo, найти тот, который надо, и открывать по пиду