ReactOS 0.4.15-dev-7934-g1dc8d80
clocks.c File Reference
#include "precomp.h"
#include <debug.h>
Include dependency graph for clocks.c:

Go to the source code of this file.

Classes

struct  KSIDEFAULTCLOCK
 
struct  KSICLOCK
 

Macros

#define NDEBUG
 

Typedefs

typedef struct KSIDEFAULTCLOCKPKSIDEFAULTCLOCK
 
typedef struct KSICLOCKPKSICLOCK
 

Functions

NTSTATUS NTAPI ClockPropertyTime (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyPhysicalTime (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyCorrelatedTime (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyCorrelatedPhysicalTime (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyResolution (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyState (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
NTSTATUS NTAPI ClockPropertyFunctionTable (IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
 
 DEFINE_KSPROPERTY_CLOCKSET (ClockPropertyTable, ClockPropertyTime, ClockPropertyPhysicalTime, ClockPropertyCorrelatedTime, ClockPropertyCorrelatedPhysicalTime, ClockPropertyResolution, ClockPropertyState, ClockPropertyFunctionTable)
 
LONGLONG FASTCALL ClockGetPhysicalTime (IN PFILE_OBJECT FileObject)
 
LONGLONG FASTCALL ClockGetCorrelatedTime (IN PFILE_OBJECT FileObject, OUT PLONGLONG SystemTime)
 
LONGLONG FASTCALL ClockGetTime (IN PFILE_OBJECT FileObject)
 
LONGLONG FASTCALL ClockGetCorrelatedPhysicalTime (IN PFILE_OBJECT FileObject, OUT PLONGLONG SystemTime)
 
KSDDKAPI NTSTATUS NTAPI KsCreateClock (IN HANDLE ConnectionHandle, IN PKSCLOCK_CREATE ClockCreate, OUT PHANDLE ClockHandle)
 
KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest (IN PIRP Irp, OUT PKSCLOCK_CREATE *OutClockCreate)
 
NTSTATUS NTAPI IKsClock_DispatchDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
NTSTATUS NTAPI IKsClock_DispatchClose (IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (IN PIRP Irp, IN PKSDEFAULTCLOCK DefaultClock)
 
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (OUT PKSDEFAULTCLOCK *DefaultClock)
 
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx (OUT PKSDEFAULTCLOCK *DefaultClock, IN PVOID Context OPTIONAL, IN PFNKSSETTIMER SetTimer OPTIONAL, IN PFNKSCANCELTIMER CancelTimer OPTIONAL, IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, IN const KSRESOLUTION *Resolution OPTIONAL, IN ULONG Flags)
 
KSDDKAPI VOID NTAPI KsFreeDefaultClock (IN PKSDEFAULTCLOCK DefaultClock)
 
KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (IN PKSDEFAULTCLOCK DefaultClock)
 
KSDDKAPI VOID NTAPI KsSetDefaultClockState (IN PKSDEFAULTCLOCK DefaultClock, IN KSSTATE State)
 
KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (IN PKSDEFAULTCLOCK DefaultClock)
 
KSDDKAPI VOID NTAPI KsSetDefaultClockTime (IN PKSDEFAULTCLOCK DefaultClock, IN LONGLONG Time)
 

Variables

KSPROPERTY_SET ClockPropertySet []
 
static KSDISPATCH_TABLE DispatchTable
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file clocks.c.

Typedef Documentation

◆ PKSICLOCK

◆ PKSIDEFAULTCLOCK

Function Documentation

◆ ClockGetCorrelatedPhysicalTime()

LONGLONG FASTCALL ClockGetCorrelatedPhysicalTime ( IN PFILE_OBJECT  FileObject,
OUT PLONGLONG  SystemTime 
)

Definition at line 91 of file clocks.c.

94{
96 return 0;
97}
#define UNIMPLEMENTED
Definition: debug.h:115

Referenced by ClockPropertyCorrelatedPhysicalTime(), and ClockPropertyFunctionTable().

◆ ClockGetCorrelatedTime()

LONGLONG FASTCALL ClockGetCorrelatedTime ( IN PFILE_OBJECT  FileObject,
OUT PLONGLONG  SystemTime 
)

Definition at line 72 of file clocks.c.

75{
77 return 0;
78}

Referenced by ClockPropertyCorrelatedTime(), and ClockPropertyFunctionTable().

◆ ClockGetPhysicalTime()

LONGLONG FASTCALL ClockGetPhysicalTime ( IN PFILE_OBJECT  FileObject)

Definition at line 63 of file clocks.c.

65{
67 return 0;
68}

Referenced by ClockPropertyFunctionTable(), and ClockPropertyPhysicalTime().

◆ ClockGetTime()

LONGLONG FASTCALL ClockGetTime ( IN PFILE_OBJECT  FileObject)

Definition at line 82 of file clocks.c.

84{
86 return 0;
87}

Referenced by ClockPropertyFunctionTable(), and ClockPropertyTime().

◆ ClockPropertyCorrelatedPhysicalTime()

NTSTATUS NTAPI ClockPropertyCorrelatedPhysicalTime ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 155 of file clocks.c.

159{
162
163 DPRINT("ClockPropertyCorrelatedPhysicalTime\n");
164
165 Time->Time = ClockGetCorrelatedPhysicalTime(IoStack->FileObject, &Time->SystemTime);
166
167 Irp->IoStatus.Information = sizeof(KSCORRELATED_TIME);
168 return STATUS_SUCCESS;
169}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
LONGLONG FASTCALL ClockGetCorrelatedPhysicalTime(IN PFILE_OBJECT FileObject, OUT PLONGLONG SystemTime)
Definition: clocks.c:91
_In_ PIRP Irp
Definition: csq.h:116
struct KSCORRELATED_TIME * PKSCORRELATED_TIME
static PLARGE_INTEGER Time
Definition: time.c:105
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
PFILE_OBJECT FileObject
Definition: iotypes.h:3169

◆ ClockPropertyCorrelatedTime()

NTSTATUS NTAPI ClockPropertyCorrelatedTime ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 137 of file clocks.c.

141{
144
145 DPRINT("ClockPropertyCorrelatedTime\n");
146
147 Time->Time = ClockGetCorrelatedTime(IoStack->FileObject, &Time->SystemTime);
148
149 Irp->IoStatus.Information = sizeof(KSCORRELATED_TIME);
150 return STATUS_SUCCESS;
151}
LONGLONG FASTCALL ClockGetCorrelatedTime(IN PFILE_OBJECT FileObject, OUT PLONGLONG SystemTime)
Definition: clocks.c:72

◆ ClockPropertyFunctionTable()

NTSTATUS NTAPI ClockPropertyFunctionTable ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 238 of file clocks.c.

242{
243 PKSCLOCK_FUNCTIONTABLE Table = (PKSCLOCK_FUNCTIONTABLE)Data;
244
245 DPRINT("ClockPropertyFunctionTable\n");
246
247 Table->GetCorrelatedPhysicalTime = ClockGetCorrelatedPhysicalTime;
248 Table->GetCorrelatedTime = ClockGetCorrelatedTime;
249 Table->GetPhysicalTime = ClockGetPhysicalTime;
250 Table->GetTime = ClockGetTime;
251
252 return STATUS_SUCCESS;
253}
LONGLONG FASTCALL ClockGetTime(IN PFILE_OBJECT FileObject)
Definition: clocks.c:82
LONGLONG FASTCALL ClockGetPhysicalTime(IN PFILE_OBJECT FileObject)
Definition: clocks.c:63
ASMGENDATA Table[]
Definition: genincdata.c:61

◆ ClockPropertyPhysicalTime()

NTSTATUS NTAPI ClockPropertyPhysicalTime ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 119 of file clocks.c.

123{
126
127 DPRINT("ClockPropertyPhysicalTime\n");
128
130
131 Irp->IoStatus.Information = sizeof(LONGLONG);
132 return STATUS_SUCCESS;
133}
__GNU_EXTENSION typedef __int64 * PLONGLONG
Definition: ntbasedef.h:382
int64_t LONGLONG
Definition: typedefs.h:68

◆ ClockPropertyResolution()

NTSTATUS NTAPI ClockPropertyResolution ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 173 of file clocks.c.

177{
179 PKSIOBJECT_HEADER ObjectHeader;
180 PIO_STACK_LOCATION IoStack;
182
183 DPRINT("ClockPropertyResolution\n");
184
185 /* get stack location */
187
188 /* get the object header */
189 ObjectHeader = (PKSIOBJECT_HEADER)IoStack->FileObject->FsContext2;
190
191 /* sanity check */
192 ASSERT(ObjectHeader);
193
194 /* locate ks pin implementation from KSPIN offset */
195 Clock = (PKSICLOCK)ObjectHeader->ObjectType;
196
197 Resolution->Error = Clock->DefaultClock->Error;
198 Resolution->Granularity = Clock->DefaultClock->Granularity;
199
200 Irp->IoStatus.Information = sizeof(KSRESOLUTION);
201 return STATUS_SUCCESS;
202}
struct KSICLOCK * PKSICLOCK
struct KSRESOLUTION * PKSRESOLUTION
struct KSIOBJECT_HEADER * PKSIOBJECT_HEADER
#define ASSERT(a)
Definition: mode.c:44
time_t Clock
Definition: output.c:18
PVOID ObjectType
Definition: kstypes.h:30
static BYTE Resolution
Definition: mouse.c:35

◆ ClockPropertyState()

NTSTATUS NTAPI ClockPropertyState ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 206 of file clocks.c.

210{
212 PKSIOBJECT_HEADER ObjectHeader;
214 PIO_STACK_LOCATION IoStack;
215
216 DPRINT("ClockPropertyState\n");
217
218 /* get stack location */
220
221 /* get the object header */
222 ObjectHeader = (PKSIOBJECT_HEADER)IoStack->FileObject->FsContext2;
223
224 /* sanity check */
225 ASSERT(ObjectHeader);
226
227 /* locate ks pin implementation from KSPIN offset */
228 Clock = (PKSICLOCK)ObjectHeader->ObjectType;
229
230 *State = Clock->DefaultClock->State;
231 Irp->IoStatus.Information = sizeof(KSSTATE);
232
233 return STATUS_SUCCESS;
234}
enum KSSTATE * PKSSTATE
KSSTATE
Definition: ks.h:1214

◆ ClockPropertyTime()

NTSTATUS NTAPI ClockPropertyTime ( IN PIRP  Irp,
IN PKSIDENTIFIER  Request,
IN OUT PVOID  Data 
)

Definition at line 101 of file clocks.c.

105{
108
109 DPRINT("ClockPropertyTime\n");
110
111 *Time = ClockGetTime(IoStack->FileObject);
112
113 Irp->IoStatus.Information = sizeof(LONGLONG);
114 return STATUS_SUCCESS;
115}

◆ DEFINE_KSPROPERTY_CLOCKSET()

◆ IKsClock_DispatchClose()

NTSTATUS NTAPI IKsClock_DispatchClose ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 351 of file clocks.c.

354{
356
357 Irp->IoStatus.Status = STATUS_SUCCESS;
359
360 return STATUS_SUCCESS;
361}
NTSTATUS NTAPI CompleteRequest(IN PIRP Irp, IN NTSTATUS Status, IN ULONG_PTR Information)
Definition: dispatch.c:19
#define IO_NO_INCREMENT
Definition: iotypes.h:598

◆ IKsClock_DispatchDeviceIoControl()

NTSTATUS NTAPI IKsClock_DispatchDeviceIoControl ( IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp 
)

Definition at line 312 of file clocks.c.

315{
316 PIO_STACK_LOCATION IoStack;
320
321 DPRINT("IKsClock_DispatchDeviceIoControl\n");
322
323 /* get current io stack */
325
326 /* FIXME support events */
327 ASSERT(IoStack->Parameters.DeviceIoControl.IoControlCode == IOCTL_KS_PROPERTY);
328
329 /* sanity check */
330 ASSERT(IoStack->Parameters.DeviceIoControl.InputBufferLength >= sizeof(KSPROPERTY));
331
332 /* call property handler */
334
335 /* get property from input buffer */
336 Property = (PKSPROPERTY)IoStack->Parameters.DeviceIoControl.Type3InputBuffer;
337
339 DPRINT("IKsClock_DispatchDeviceIoControl property Set |%S| Id %u Flags %x Status %lx ResultLength %lu\n", GuidString.Buffer, Property->Id, Property->Flags, Status, Irp->IoStatus.Information);
341
342
343 Irp->IoStatus.Status = STATUS_SUCCESS;
345
346 return STATUS_SUCCESS;
347}
LONG NTSTATUS
Definition: precomp.h:26
KSPROPERTY_SET ClockPropertySet[]
Definition: clocks.c:50
KSDDKAPI NTSTATUS NTAPI KsPropertyHandler(IN PIRP Irp, IN ULONG PropertySetsCount, IN const KSPROPERTY_SET *PropertySet)
Definition: property.c:358
struct KSIDENTIFIER * PKSPROPERTY
Status
Definition: gdiplustypes.h:25
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
#define IOCTL_KS_PROPERTY
Definition: ks.h:127
static PWSTR GuidString
Definition: apphelp.c:93
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
struct _IO_STACK_LOCATION::@1564::@1565 DeviceIoControl
union _IO_STACK_LOCATION::@1564 Parameters

◆ KsAllocateDefaultClock()

KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock ( OUT PKSDEFAULTCLOCK DefaultClock)

Definition at line 434 of file clocks.c.

436{
437 return KsAllocateDefaultClockEx(DefaultClock, NULL, NULL, NULL, NULL, NULL, 0);
438}
KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx(OUT PKSDEFAULTCLOCK *DefaultClock, IN PVOID Context OPTIONAL, IN PFNKSSETTIMER SetTimer OPTIONAL, IN PFNKSCANCELTIMER CancelTimer OPTIONAL, IN PFNKSCORRELATEDTIME CorrelatedTime OPTIONAL, IN const KSRESOLUTION *Resolution OPTIONAL, IN ULONG Flags)
Definition: clocks.c:446
#define NULL
Definition: types.h:112

◆ KsAllocateDefaultClockEx()

KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx ( OUT PKSDEFAULTCLOCK DefaultClock,
IN PVOID Context  OPTIONAL,
IN PFNKSSETTIMER SetTimer  OPTIONAL,
IN PFNKSCANCELTIMER CancelTimer  OPTIONAL,
IN PFNKSCORRELATEDTIME CorrelatedTime  OPTIONAL,
IN const KSRESOLUTION *Resolution  OPTIONAL,
IN ULONG  Flags 
)

Definition at line 446 of file clocks.c.

454{
456
457 if (!DefaultClock)
459
460 /* allocate default clock */
462 if (!Clock)
464
465 /* initialize default clock */
466 KeInitializeSpinLock(&Clock->TimeLock);
467 KeInitializeTimer(&Clock->Timer);
468 Clock->ReferenceCount = 1;
469 Clock->Context = Context;
470 Clock->SetTimer = SetTimer;
471 Clock->CancelTimer = CancelTimer;
472 Clock->CorrelatedTime = CorrelatedTime;
473 Clock->Flags = Flags;
474
475 if (Resolution)
476 {
477 if (SetTimer)
478 {
479 Clock->Error = Resolution->Error;
480 }
481
482 if (CorrelatedTime)
483 {
484 Clock->Granularity = Resolution->Granularity;
485 }
486 }
487
488 *DefaultClock = (PKSDEFAULTCLOCK)Clock;
489 return STATUS_SUCCESS;
490}
#define NonPagedPool
Definition: env_spec_w32.h:307
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
PVOID PKSDEFAULTCLOCK
Definition: ks.h:1854
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: misc.c:29
#define STATUS_INVALID_PARAMETER_1
Definition: ntstatus.h:475
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
Definition: timerobj.c:233
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by IKsPin_DispatchCreateClock(), and KsAllocateDefaultClock().

◆ KsCreateClock()

KSDDKAPI NTSTATUS NTAPI KsCreateClock ( IN HANDLE  ConnectionHandle,
IN PKSCLOCK_CREATE  ClockCreate,
OUT PHANDLE  ClockHandle 
)

Definition at line 260 of file clocks.c.

264{
268 sizeof(KSCLOCK_CREATE),
271}
#define GENERIC_READ
Definition: compat.h:135
_In_ PKSCLOCK_CREATE ClockCreate
Definition: ks.h:4527
_In_ PKSCLOCK_CREATE _Out_ PHANDLE ClockHandle
Definition: ks.h:4528
#define KSSTRING_Clock
Definition: ks.h:49
_In_ PKSPIN_CONNECT _In_ ACCESS_MASK _Out_ PHANDLE ConnectionHandle
Definition: ks.h:4538
NTSTATUS NTAPI KspCreateObjectType(IN HANDLE ParentHandle, IN LPWSTR ObjectType, PVOID CreateParameters, UINT CreateParametersSize, IN ACCESS_MASK DesiredAccess, OUT PHANDLE NodeHandle)
Definition: topology.c:16

◆ KsCreateDefaultClock()

KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock ( IN PIRP  Irp,
IN PKSDEFAULTCLOCK  DefaultClock 
)

Definition at line 383 of file clocks.c.

386{
390
392 if (!NT_SUCCESS(Status))
393 return Status;
394
395 /* let's allocate the clock struct */
397 if (!Clock)
398 {
401 }
402
403 /* now allocate the object header */
404 Status = KsAllocateObjectHeader((PVOID*)&Clock->ObjectHeader, 0, NULL, Irp, &DispatchTable);
405
406 /* did it work */
407 if (!NT_SUCCESS(Status))
408 {
409 /* failed */
412 return Status;
413 }
414
415 /* initialize clock */
416 /* FIXME IKsClock */
417 Clock->ObjectHeader->ObjectType = (PVOID)Clock;
418 Clock->ref = 1;
419 Clock->ClockCreate = ClockCreate;
420 Clock->DefaultClock = (PKSIDEFAULTCLOCK)DefaultClock;
421
422 /* increment reference count */
423 InterlockedIncrement(&Clock->DefaultClock->ReferenceCount);
424
425 return Status;
426}
#define InterlockedIncrement
Definition: armddk.h:53
KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest(IN PIRP Irp, OUT PKSCLOCK_CREATE *OutClockCreate)
Definition: clocks.c:279
struct KSIDEFAULTCLOCK * PKSIDEFAULTCLOCK
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader(OUT KSOBJECT_HEADER *Header, IN ULONG ItemsCount, IN PKSOBJECT_CREATE_ITEM ItemsList OPTIONAL, IN PIRP Irp, IN KSDISPATCH_TABLE *Table)
Definition: api.c:610
VOID FreeItem(IN PVOID Item)
Definition: misc.c:37
void * PVOID
Definition: typedefs.h:50
_In_ PWDFDEVICE_INIT _In_ PWDF_PDO_EVENT_CALLBACKS DispatchTable
Definition: wdfpdo.h:248

Referenced by IKsPin_DispatchCreateClock().

◆ KsFreeDefaultClock()

KSDDKAPI VOID NTAPI KsFreeDefaultClock ( IN PKSDEFAULTCLOCK  DefaultClock)

Definition at line 498 of file clocks.c.

500{
502
503 InterlockedDecrement(&Clock->ReferenceCount);
504
505 if (Clock->ReferenceCount == 0)
506 {
507 /* free default clock */
509 }
510}
#define InterlockedDecrement
Definition: armddk.h:52

◆ KsGetDefaultClockState()

KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState ( IN PKSDEFAULTCLOCK  DefaultClock)

Definition at line 518 of file clocks.c.

520{
522 return Clock->State;
523}

◆ KsGetDefaultClockTime()

KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime ( IN PKSDEFAULTCLOCK  DefaultClock)

Definition at line 551 of file clocks.c.

553{
554 LONGLONG Time = 0LL;
556
557 Time = ExInterlockedCompareExchange64(&Clock->Time, &Time, &Time, &Clock->TimeLock);
558
559 return Time;
560}
#define LL
Definition: tui.h:167
#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock)
Definition: exfuncs.h:880

◆ KsSetDefaultClockState()

KSDDKAPI VOID NTAPI KsSetDefaultClockState ( IN PKSDEFAULTCLOCK  DefaultClock,
IN KSSTATE  State 
)

Definition at line 531 of file clocks.c.

534{
536
537 if (State != Clock->State)
538 {
539 /* FIXME set time etc */
540 Clock->State = State;
541 }
542
543}

◆ KsSetDefaultClockTime()

KSDDKAPI VOID NTAPI KsSetDefaultClockTime ( IN PKSDEFAULTCLOCK  DefaultClock,
IN LONGLONG  Time 
)

Definition at line 568 of file clocks.c.

571{
573
574 /* set the time safely */
575 ExInterlockedCompareExchange64(&Clock->Time, &Time, &Clock->Time, &Clock->TimeLock);
576}

◆ KsValidateClockCreateRequest()

KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest ( IN PIRP  Irp,
OUT PKSCLOCK_CREATE OutClockCreate 
)

Definition at line 279 of file clocks.c.

282{
285 ULONG Size;
286
287 /* minimum request size */
288 Size = sizeof(KSCLOCK_CREATE);
289
290 /* copy create request */
293 &Size,
294 (PVOID*)&ClockCreate);
295
296 if (!NT_SUCCESS(Status))
297 return Status;
298
299 if (ClockCreate->CreateFlags != 0)
300 {
301 /* flags must be zero */
304 }
305
306 *OutClockCreate = ClockCreate;
307 return STATUS_SUCCESS;
308}
NTSTATUS KspCopyCreateRequest(IN PIRP Irp, IN LPWSTR ObjectClass, IN OUT PULONG Size, OUT PVOID *Result)
Definition: misc.c:44
ULONG CreateFlags
Definition: ks.h:1857
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533

Referenced by KsCreateDefaultClock().

Variable Documentation

◆ ClockPropertySet

KSPROPERTY_SET ClockPropertySet[]
Initial value:
=
{
{
sizeof(ClockPropertyTable) / sizeof(KSPROPERTY_ITEM),
(const KSPROPERTY_ITEM*)&ClockPropertyTable,
0,
}
}
#define KSPROPSETID_Clock
Definition: ks.h:315

Definition at line 50 of file clocks.c.

Referenced by IKsClock_DispatchDeviceIoControl().

◆ DispatchTable

KSDISPATCH_TABLE DispatchTable
static
Initial value:
=
{
}
NTSTATUS NTAPI IKsClock_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: clocks.c:351
NTSTATUS NTAPI IKsClock_DispatchDeviceIoControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: clocks.c:312
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1189
KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
Definition: irp.c:1271
KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:67
KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:22
KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength, IN ULONG IoControlCode, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
Definition: irp.c:1251

Definition at line 363 of file clocks.c.