Zadatak:
na koji se naÄŤin moĹľe rukovatelj na timer naslijediti od procesa
pozivatelja?
------------
Source code:
#define _WIN32_WINNT 0X0500
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
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.