All pastes #35075 Raw Edit

Unnamed

public text v1 · immutable
#35075 ·published 2005-12-28 18:15 UTC
rendered paste body
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.