IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Текущий процесс, Visual C++ 2008 EE
18192123
сообщение 19.10.2008 22:56
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Требуется получить идентификатор текущего процесса...Использую функцию GetCurrentProcessId(void);
В результате - вылет приложения...Объясните пожалуйста, в чём дело?


...
DWORD lpID=GetCurrentProcessId();
HWND hIdVal = CreateWindow(TEXT("STATIC"), NULL, WS_CHILD | WS_VISIBLE | SS_LEFT,
(int)(Rect.left+135), (int)(Rect.top+60), (int)(Rect.right- Rect.left-700), 20,
hwnd, NULL, hInstance, NULL);
SendMessage(hIdVal,WM_SETTEXT, 0, (LPARAM)(LPCSTR)lpID); // вылет здесь
...

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
svetkom
сообщение 27.10.2008 0:54
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Женский
Реальное имя: света

Репутация: -  0  +


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 - что это?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Текущий процесс   19.10.2008 22:56
volvo   Все-таки не стоило бы приводить DWORD к указателю ...   20.10.2008 0:00
18192123   HWND hIdVal = CreateWindow( ... ); wcha...   20.10.2008 0:18
volvo   Это не ошибка, а предупреждение... wsprintf помече...   20.10.2008 0:23
18192123   Пытаюсь определить дескриптор текущего процесса (и...   20.10.2008 21:20
volvo   Ты получаешь дескриптор мьютекса, а не текущего пр...   20.10.2008 22:17
18192123   Ты получаешь дескриптор мьютекса, а не текущего п...   20.10.2008 22:33
volvo   , то кто мешает тебе получить PID этого процесса (...   20.10.2008 23:27
18192123   мне требуется определить копию дескриптора текущег...   24.10.2008 20:57
volvo   Как ты думаешь, что сделает вот этот вызов, к прим...   24.10.2008 21:45
18192123   А вообще, не очень ясна цель производимых тобой м...   24.10.2008 21:52
18192123   Ещё один вопросик...по поводу DuplicateHandle().. ...   25.10.2008 20:58
volvo   По-моему ты чего-то недоговариваешь... Смотри: что...   25.10.2008 21:22
svetkom   volvo попробую объяснить. мы с 18192123 учимся вме...   26.10.2008 23:46
volvo   svetkom, можно пальцем показать, дубликат ЧЕГО и Г...   27.10.2008 0:33
svetkom   volvo, извиняюс.. попробую еще раз. значит, на фор...   27.10.2008 0:54
volvo   Допустим, сдублировала hProcess в dup... Что дальш...   27.10.2008 2:27
18192123   Получаю псевдодескриптор текущего процесса с помощ...   27.10.2008 21:48
volvo   Может... Больше того, так должно быть: MSDN: GetC...   27.10.2008 22:11


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.07.2025 2:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"