volvo, извиняюс.. попробую еще раз. значит, на форме есть кнопка, по нажатию на которую происходит создание процесса и присоединение его к заданию:
void OnClickButCreateProc(HWND hwnd) { STARTUPINFO si; PROCESS_INFORMATION pi; OPENFILENAME ofn; TCHAR szFileName[260]; TCHAR szBuf[20]; LPCWSTR lpFilter=TEXT("Executive\0*.EXE\0"); int nError; BOOL bRes; ZeroMemory(&si,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); ZeroMemory(&ofn,sizeof(OPENFILENAME)); ofn.lStructSize=sizeof(OPENFILENAME) ; ofn.hwndOwner=hWndMain; ofn.hInstance=NULL; ofn.lpstrFile = szFileName; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(szFileName); ofn.lpstrFilter = lpFilter; ofn.nFilterIndex = 1; ofn.lpstrFileTitle = NULL; ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn)) { if (CreateProcess(NULL,ofn.lpstrFile, NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,&si,&pi)) { hProcess=pi.hProcess; // дескриптор созданного процесса. его будем дублировать. AssignProcessToJobObject(hJob,hProcess); if (IsProcessInJob(hProcess,hJob,&bRes)) { if (!bRes) {MessageBox(hWndMain,_ultow(GetLastError(),szBuf,16),TEXT("Ошибка"),MB_OK|MB_ICONERROR);} else { HANDLE dup; //сюда дублируем DWORD nLab2ID=GetCurrentProcessID();//ID процесса, из которого создали hProcess HANDLE lab2=OpenProcess(PROCESS_ALL_ACCESS,TRUE,nLab2ID); //его же дескриптор DuplicateHandle(hProcess, lab2, GetCurrentProcess(), &dup, NULL, NULL, DUPLICATE_CLOSE_SOURCE| DUPLICATE_SAME_ACCESS); _ultow((unsigned long)dup,szBuf,10); SendMessage(hProcDsc,WM_SETTEXT, 0, (LPARAM)(LPCSTR)szBuf); } } else MessageBox(hWndMain,_ultow(GetLastError(),szBuf,16),TEXT("Ошибка"),MB_OK|MB_ICONERROR); } else MessageBox(hWndMain,_ultow(GetLastError(),szBuf,16),TEXT("Ошибка"),MB_OK|MB_ICONERROR); } else { nError=CommDlgExtendedError(); if (nError) MessageBox(hWndMain,_ultow(nError,szBuf,16),TEXT("Ошибка"),MB_OK|MB_ICONERROR); } }
вот это имелось ввиду.. не думала что все так серьезно, насчет порушения системы..
Добавлено через 14 мин. и еще вопрос. вот тут
Цитата
HANDLE hMyProcess = GetCurrentProcess(); hRemProcess = OpenProcess(PROCESS_DUP_HANDLE, NULL, processID); DWORD dwResult = 0; if (hRemProcess) { HANDLE hMyHandle = NULL; DuplicateHandle(hRemProcess, hMyProcess, handle, &hMyHandle, NULL, NULL, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS); }
handle - третий параметр в DuplicateHandle - что это?