You are on page 1of 12

MC LC

1. M u ..........................................................................................2 2. Khi nim tin trnh ........................................................................2 3. Thao tc trn tin trnh ....................................................................2 a. To tin trnh ....................................................................................................2 b. Chui cng vic to ra tin trnh ......................................................................3 c. Kt thc tin trnh .............................................................................................3 d. Mt s hm qun l tin trnh...........................................................................4 3.Tiny Shell .........................................................................................4 a. Menu chnh :.......................................................................................................4 b. To tin trnh ......................................................................................................5 c. In thng tin cc tin trnh con c khi to ...................................................6 d. Kt thc tin trnh .............................................................................................8 e. Suspend, resume tin trnh ...............................................................................9 f. Mt s hm khc s dng trong TinyShell ....................................................10

Bi tp ln TinyShell
1. M u
Bi tp ln xy dng mt chng trnh nh dng qun l tin trnh. Chng trnh c th gi to tin trnh, kt thc tin trnh con va to, tr hot, khi ng li tin trnh. In danh sch thng tin ca tin trnh con c to nh process ID, s lung, id tin trnh cha.. Chng trnh c vit trn C, dng qun l cc tin trnh chy trn windows. S dng menu nhp thc hin gi lnh ca chng trnh. Trc khi xy dng c mt Tiny shell, chng cn hiu r hn v tin trnh cng nh cc thao tc qun l tin trnh.

2. Khi nim tin trnh


Tin trnh l mt khi nim c nhc ti trong rt nhiu lnh vc cng ngh thng tin. Chng ta s dng t tin trnh (process) din t mt thc th tru tng thi hnh mt chng trnh bn trong b x l. Khi nim : Tin trnh l mt b phn ca mt chng trnh ang thc hin, n v thc hin tin trnh l processer. V tin trnh l mt b phn ca chng trnh nn tng t nh chng trnh tin trnh bao gm khng gian a ch : Text section (program code), data section (cha global variables) s hu mt con tr lnh- program counter (PC), mt con tr stack- stack pointer (SP), mt tp cc thanh ghimemory management registers, mt khng gian a ch trong b nh chnh, tt c cc thng tin cn thit khc tin trnh c th hot ng c(cc open file,cc qu trnh con,) , n cn bao gm hot ng hin hnh nh c hin din bi gi tr ca b m chng trnh v ni dung cc thanh ghi ca b x l

3. Thao tc trn tin trnh


a. To tin trnh
Mt tin trnh ca Win32 c to ra khi mt chng trnh ng dng gi chc nng to tin trnh,v d nh mt s lnh: CreateProcess CreateProcessAsUser CreateProcessWithLogonW To ra mt tin trnh v tuyn mi s dng s bo mt v chng thc ngi gi To ra mt tin trnh v tuyn mi vi mt du hiu bo mt xc nh To ra mt tin trnh v tuyn mi vi du hiu bo mt xc nh,cho php h s v

ngi s dng c np Chng ta tm hiu v function CreateProcess,n c 10 tham s bao gm chng trnh thi hnh,cc tham s lnh cho chng trnh,cc thuc tnh bo mt khc,cc bit m iu khin cc file tha hng c c m hay khng,thng tin u tin,mt c t ca window khi to cho tin trnh(nu c),v mt con tr ti cu trc m thng tin v tin trnh mi khi to c gi li ti ngi gi.

CreateProcess( LPCTSTR lpApplicationName, //Tn ca chng trnh cn thc hin LPTSTR lpCommandLine, //Tham s ca dng lnh LPSECURITY_ATTRIBUTES lpProcessAttributes,//Thuc tnh an ninh tin trnh LPSECURITY_ATTRIBUTES lpThreadAttributes,// thuc tnh an ninh lung BOOL bInheritHandles,//Cho php k tha cc thit b DWORD dwCreationFlags,//C to tin trnh LPVOID lpEnvironment,//Tr ti khi mi trng LPCTSTR lpCurrentDirectory,//ng dn y n chng trnh

b. Chui cng vic to ra tin trnh Mt tin trnh ca Win32 -c to ra khi mt ch-ng trnh ng dng gi chc nng to tin trnh v d nh- CreateProcess , CreateProcessAsUser, hay CreateProcessWithLogonW . To ra mt tin trnh Win32 cha mt vi giai on tin hnh trong ba phn ca h iu hnh : th- vin Kernell.dll cua Win32 , thc hin Windows 2000 , to ra mt i t-ng tin trnh thc hin Windows 2000. Danh sch d-i y tng kt cc giai on chnh trong vic to ra mt tin trnh Win32 vi hm CreateProcess. Hot ng ny thc hin mi giai on -c m t chi tit trong cc phn d-i y. 1.M mt file nh (.exe) thc hin trong tin trnh 2.To mt i t-ng tin trnh thc hin WindowsXP 3.To ra mt tuyn khi u (ngn xp, ng cnh v tuyn thc hin WindowsXP) 4.Thng bo cho h thng con ca Win32 v mt tin trnh mi n c th khi to cho tuyn v tin trnh mi. 5.Thi hnh tuyn khi u (tr khi c ca CREATE_SUSPENDED -c ch r) 6. Khi c tuyn v tin trnh mi, hon thnh s khi to ca khng gian a ch
Cng vi CreateProcess,Win32 c khong 100 hm khc phc v vic qun l v ng b tin trnh lin quan

c. Kt thc tin trnh


Hu ht cc tin trnh kt thc v chng c hon thnh.Khi mt trnh bin dch bin dch xong mt chng trnh,trnh bin dch ny thi hnh mt li gi h thng bo vi h iu hnh rng n thnh cng.Li gi ny l ExitProcess trong Windows.

VOID ExitProcess( UINT uExitCode );

L do th 2 cho vic kt thc l tin trnh pht hin li nghim trng.V d,nu ta mun bin dch file mkb.c nhng n khng tn ti.Thay v mn hin th tng tc cc tin trh chung b thot khi a ra tham s sai,n s m 1 hp thoi v yu cu ngi s dng th li L do th 3 cho vic kt thc l do li ca tin trnh,thng nh vo chng trnh kim tra li.V d khi n c thi hnh mt lnh khng hp l,ko b nh hoc chia cho 0 L do th 4 l mt tin trnh thi hnh mt li gi h thng bo cho h iu hnh hy cc tin trnh khc.Trong Windows hm l TerminateProcess
BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode );

d. Mt s hm qun l tin trnh


Suspend mt tin trnh
DWORD WINAPI SuspendThread( __in HANDLE hThread //th i tng );

Suspend mt tin trnh


DWORD WINAPI SuspendThread( __in HANDLE hThread //th i tng );

3.Tiny Shell
a. Menu chnh :

Tinyshell gm 9 mc nh:

a. Mc 1, to 1 tin trnh con, chy song song vi shell b. Mc 2, to 1 tin trnh con, shell s phi ch tin trnh con thc hin xong

c. d. e. f. g. h. i.

Mc 3, suspend tin trnh con ang chy Mc 4, Resum li tin trnh con va b suspend Mc 5, Hy tt c cc tin trnh con ang chy Mc 6, Hy tin trnh con va gi Mc 7, In ra thng tin ca tt c cc tin trnh con nh PID, Thread count, Parrent ID Mc 8, Gi file run.bat cha danh sch tin trnh cn thc hin Mc 9, thot khi shell

b. To tin trnh
Xy dng hm createprocees()
DWORD creatProcess(char* cmline){ // Tao process si.cb = sizeof(si); ZeroMemory(&si, sizeof(si)); if(! CreateProcess(NULL, cmline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) printf( "CreateProcess failed (%d).\n", GetLastError() ); else printf("Chay thanh cong"); return pi.dwProcessId;}

to tin trnh con chy song song vi shell gn c tin trnh c CREATE_NEW_CONSOLE bt shell ch cho n khi tin trnh con thc hin xong, s dng hm
DWORD WINAPI WaitForSingleObject( __in HANDLE hHandle,//Th i tng __in DWORD dwMilliseconds //Thi gian ch i

c. In thng tin cc tin trnh con c khi to


HANDLE WINAPI CreateToolhelp32Snapshot( __in __in ); DWORD dwFlags, DWORD th32ProcessID

Mc ch: To mt nh chp (snapshot) ly thng tin cc tin trnh (cng nh cc lung , cc modul) Tham s dwFlags gi ci cn lit k( ly snapshot), y ta dng TH32CS_SNAPPROCESS ly snapshot cc tin trnh trong h thng, TH32CS_SNAPTHREAD ly snapshot cc lung c trong h thng. Tham s th32ProcessID nh danh chnh xc tin trnh cn ly snapshot. ly hin th thng tin t snapshot, ta s dng mt struct c sn typedef struct tagPROCESSENTRY32
{

DWORD dwSize; //Kch thc ca struct , s c set khi gi DWORD cntUsage; DWORD th32ProcessID; // Id ca tin trnh ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; // associated exe DWORD cntThreads; //S lung ca tin trnh DWORD th32ParentProcessID; // ID ca tin trnh cha LONG pcPriClassBase; // Base priority of process's threads DWORD dwFlags; CHAR szExeFile[MAX_PATH]; // Tn ca tin trnh } PROCESSENTRY32;

S dng hm sau duyt qua tt c cc process t h thng


BOOL WINAPI Process32Next( __in HANDLE hSnapshot,// th i tng ly t hm CreateToolhelp32Snapshot __out LPPROCESSENTRY32 lppe //Con tr n struct PROCESSENTRY32 ); ----------------------------------------------------------------------------------------//Dng hm do while duyt tt c cc tin trnh, v d di y dng ly thng t in ca //cc tin trnh c id tin trnh l processID do{ if(pe32.th32ProcessID==processID){ _tprintf( TEXT("\n\n=====================================================" )); _tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile ); _tprintf( TEXT("\n-------------------------------------------------------" )); _tprintf( TEXT("\n Process ID = %d"), pe32.th32ProcessID ); // in id cua tien trinh _tprintf( TEXT("\n Thread count = %d"), pe32.cntThreads );//in so luong cua ti en trinh _tprintf( TEXT("\n Parent process ID = %d"), pe32.th32ParentProcessID ); _tprintf( TEXT("\n Priority base = %d"), pe32.pcPriClassBase ); }

}while( Process32Next( hProcessSnap, &pe32 ) );

Hm ly danh sch tin trnh


BOOL GetProcessList(){ HANDLE hProcessSnap; PROCESSENTRY32 pe32; //Khoi tao con tro den struct DWORD ParentID; ParentID=GetParentID();//Ly id cua tien trinh cha t hm GetParentID hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); return( FALSE ); }

// Cap bo nho cho struct truoc khi su dung pe32.dwSize = sizeof( PROCESSENTRY32 ); //Duyet qua snapshot cua tien trinh va hien thi thong tin do{ //Neu la con cua tien trinh cha da goi, //hien thi thong tin cac tien trinh con if(pe32.th32ParentProcessID==ParentID){ _tprintf( TEXT("\n\n===============================================" )); _tprintf( TEXT("\nPROCESS NAME: %s"), pe32.szExeFile );

_tprintf( TEXT("\n-------------------------------------------------" )); _tprintf( TEXT("\n Process ID = %d"), pe32.th32ProcessID );

// in id cua tien trinh _tprintf( TEXT("\n Thread count = %d"), pe32.cntThreads );

//in so luong cua tien trinh _tprintf( TEXT("\n Parent process ID = %d"),pe32.th32ParentProcessID );

//in id cua tien trinh cha

_tprintf( TEXT("\n }

Priority base

= %d"), pe32.pcPriClassBase );

}while( Process32Next( hProcessSnap, &pe32 ) ); CloseHandle( hProcessSnap ); return( TRUE ); }

d. Kt thc tin trnh


S dng
CreateToolhelp32Snapshot() ly snapshot cc process trong h thng. S dng

Process32Next() ( nu trn) tm kim tin trnh con ang chy, s dng hm sau kt thc tin trnh
BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode );

Hm Kill
BOOL Kill(){ HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; DWORD ParentID; ParentID=GetParentID(); // Lay 1 snapshot cho tat ca cac tien trinh trong he thong hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); return FALSE; } pe32.dwSize = sizeof( PROCESSENTRY32 ); do{ if(pe32.th32ParentProcessID==ParentID) //Lay the tien trinh tu ID da co hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE,pe32.th32ProcessID); TerminateProcess(hProcess,0);

} while( Process32Next( hProcessSnap, &pe32 ) ); CloseHandle( hProcessSnap ); return TRUE; }

e. Suspend, resume tin trnh


S dng CreateToolhelp32Snapshot()( c nu trn), ly snapshot cc lung ang chy trong h thng, sau dng hm SuspendThread, ResumeThread tr hon, khi ng li tin trnh c PID bit trc
//V d, Hm suspend tin trnh

BOOL Suspend(DWORD dwOwnerPID ) { HANDLE hThreadSnap = INVALID_HANDLE_VALUE; HANDLE hThread; THREADENTRY32 te32; //Lay tat ca cac luong CreateToolhelp32Snapshot() dang chay ,khai bo TH32CS_SNAPTHREAD trong hm

hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); if( hThreadSnap == INVALID_HANDLE_VALUE ) return( FALSE ); te32.dwSize = sizeof(THREADENTRY32); //Duyet toan bo cac luong dang chay do { hThread = OpenThread( THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID) ; if( te32.th32OwnerProcessID == dwOwnerPID ){ //Lenh suspend thread if(SuspendThread(hThread)==-1){ printf("\nSuspend that bai: Error %d", GetLastError()); return FALSE; }else{ // in ra thread id bi suspend _tprintf( TEXT("\n } Da supend THREAD co ID = %d"), te32.th32ThreadID );

} } while( Thread32Next(hThreadSnap, &te32 ) ); CloseHandle( hThreadSnap ); return( TRUE ); }

f. Mt s hm khc s dng trong TinyShell

Hm ny ch ly c ID ca tin trnh cha khi gi tin trnh con.Bi Tiny Shell ny vn cha c cch ly ID tin trnh cha m khng cn gi tin trnh con

BOOL GetParentID() { HANDLE hProcessSnap; PROCESSENTRY32 pe32; hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == INVALID_HANDLE_VALUE ) { printError( TEXT("CreateToolhelp32Snapshot (of processes)") ); return( FALSE );} pe32.dwSize = sizeof( PROCESSENTRY32 ); do{//Ly id tin trnh cha ca tin trnh con mi gi l id cn tm if(pe32.th32ProcessID==pi.dwProcessId) return(pe32.th32ParentProcessID); } while( Process32Next( hProcessSnap, &pe32 ) ); CloseHandle( hProcessSnap );}

Hm thng bo li
void printError( TCHAR* msg ) { DWORD eNum; TCHAR sysMsg[256]; TCHAR* p;

eNum = GetLastError( ); //Ly thng tin li t hm GetLastError() FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, eNum, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), sysMsg, 256, NULL ); p = sysMsg; while( ( *p > 31 ) || ( *p == 9 ) ) ++p; do { *p-- = 0; } while( ( p >= sysMsg ) && ( ( *p == '.' ) || ( *p < 33 ) ) ); // Hin thi thng bo li _tprintf( TEXT("\n WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );}

thc thi file run.bat cha tin trnh cn thc hin, dng gi hm ShellExecute() thc thi file run.bat To file Run.bat cha cc tin trnh cn thc hin
TITLE CNTT1 echo TinyShell @echo off start mspaint.exe//tn file np vo start test.exe //nt

Cm n thy c bi bo co v TinyShell, bo co cn nhiu sai st v c nhiu vn cha hiu, mong thy gp chng em hiu r v hon thin hn

Sinh vin thc hin


Trn Xun Thy_CNTT1_MSV_20102285 Phm Vn iu_CNTT1_MSV_20101374 Nguyn c Trung_CNTT1_MSV_20102766 ng Ngc Thuyn _CNTT1_20102277

TI LIU THAM KHO


http://msdn.microsoft.com/en-us/library/windows/desktop/ms684847(v=vs.85).aspx

Slide H iu hnh, thy Phm ng Hi

You might also like