Zadatak: na koji se naÄŤin moĹľe rukovatelj na timer naslijediti od procesa pozivatelja? ------------ Source code: #define _WIN32_WINNT 0X0500 #include #include #include #include void main() { HANDLE hTimer = NULL; LARGE_INTEGER liDueTime; liDueTime.QuadPart = -50000000; printf("alarm application starting\n"); // Set up a 5 second timer object hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer"); SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0); // Now wait for the alarm printf("waiting for alarm\n"); // Wait for the timer object WaitForSingleObject(hTimer, INFINITE); printf("Ring...Ring!\n"); printf("alarm application done\n"); exit(0); } --------- Rijesenje: Kod funkcije : HANDLE CreateWaitableTimer( LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName ); Parametar lpTimerAttributes, ukoliko je NULL, timer objekt dobije defaultni security descriptor i rukovoditelj (handle) nije moguce naslijediti. Potrebno je nadodati : SECURITY_ATTRIBUTES sigurnosni_atribut; I predati taj argument CreateWaitableTimer funkciji. typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES; Variablu bInheritHandle, ako postavimo na TRUE, novi proces nasljeduje rukovoditelja! Variabla nLength oznacava velicinu, u bajtovima. Njoj postavljamo velicinu strukture! Variabla lpSecurityDescriptor opisuje sigurnosne privilegije objekta.