mirror of
https://github.com/reactos/reactos.git
synced 2024-07-28 23:29:19 +00:00
- Implement KsQueryObjectAccessMask, KsQueryObjectCreateItem
- Use KSQUEUE_SPINLOCK_IRP_STORAGE macro for access the stored spin lock svn path=/trunk/; revision=42150
This commit is contained in:
parent
db1215455b
commit
1ad4db139c
|
@ -245,7 +245,7 @@ KsQueryDevicePnpObject(
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
KSDDKAPI
|
KSDDKAPI
|
||||||
ACCESS_MASK
|
ACCESS_MASK
|
||||||
|
@ -253,8 +253,11 @@ NTAPI
|
||||||
KsQueryObjectAccessMask(
|
KsQueryObjectAccessMask(
|
||||||
IN KSOBJECT_HEADER Header)
|
IN KSOBJECT_HEADER Header)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
PKSIOBJECT_HEADER ObjectHeader = (PKSIOBJECT_HEADER)Header;
|
||||||
return STATUS_UNSUCCESSFUL;
|
|
||||||
|
/* return access mask */
|
||||||
|
return ObjectHeader->AccessMask;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -402,7 +405,7 @@ KsSetPowerDispatch(
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@unimplemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
KSDDKAPI
|
KSDDKAPI
|
||||||
PKSOBJECT_CREATE_ITEM
|
PKSOBJECT_CREATE_ITEM
|
||||||
|
@ -410,8 +413,8 @@ NTAPI
|
||||||
KsQueryObjectCreateItem(
|
KsQueryObjectCreateItem(
|
||||||
IN KSOBJECT_HEADER Header)
|
IN KSOBJECT_HEADER Header)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
PKSIOBJECT_HEADER ObjectHeader = (PKSIOBJECT_HEADER)Header;
|
||||||
return NULL;
|
return ObjectHeader->OriginalCreateItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -649,6 +652,13 @@ KsAllocateObjectHeader(
|
||||||
/* store parent device */
|
/* store parent device */
|
||||||
ObjectHeader->ParentDeviceObject = IoGetRelatedDeviceObject(IoStack->FileObject);
|
ObjectHeader->ParentDeviceObject = IoGetRelatedDeviceObject(IoStack->FileObject);
|
||||||
|
|
||||||
|
/* store originating create item */
|
||||||
|
ObjectHeader->OriginalCreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
|
||||||
|
|
||||||
|
/* FIXME store access mask see KsQueryObjectAccessMask */
|
||||||
|
ObjectHeader->AccessMask = IoStack->Parameters.Create.SecurityContext->DesiredAccess;
|
||||||
|
|
||||||
|
|
||||||
/* store result */
|
/* store result */
|
||||||
*Header = ObjectHeader;
|
*Header = ObjectHeader;
|
||||||
|
|
||||||
|
@ -1145,3 +1155,4 @@ KsCacheMedium(
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -830,10 +830,8 @@ KsReleaseIrpOnCancelableQueue(
|
||||||
/* get current irp stack */
|
/* get current irp stack */
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
|
||||||
/* get internal queue lock
|
/* get internal queue lock */
|
||||||
* see KsAddIrpToCancelableQueue
|
SpinLock = KSQUEUE_SPINLOCK_IRP_STORAGE(Irp);
|
||||||
*/
|
|
||||||
SpinLock = (PKSPIN_LOCK)Irp->Tail.Overlay.DeviceQueueEntry.DeviceListEntry.Flink;
|
|
||||||
|
|
||||||
/* acquire spinlock */
|
/* acquire spinlock */
|
||||||
KeAcquireSpinLock(SpinLock, &OldLevel);
|
KeAcquireSpinLock(SpinLock, &OldLevel);
|
||||||
|
@ -993,10 +991,8 @@ KsRemoveSpecificIrpFromCancelableQueue(
|
||||||
PKSPIN_LOCK SpinLock;
|
PKSPIN_LOCK SpinLock;
|
||||||
KIRQL OldLevel;
|
KIRQL OldLevel;
|
||||||
|
|
||||||
/* get internal queue lock
|
/* get internal queue lock */
|
||||||
* see KsAddIrpToCancelableQueue
|
SpinLock = KSQUEUE_SPINLOCK_IRP_STORAGE(Irp);
|
||||||
*/
|
|
||||||
SpinLock = (PKSPIN_LOCK)Irp->Tail.Overlay.DeviceQueueEntry.DeviceListEntry.Flink;
|
|
||||||
|
|
||||||
/* acquire spinlock */
|
/* acquire spinlock */
|
||||||
KeAcquireSpinLock(SpinLock, &OldLevel);
|
KeAcquireSpinLock(SpinLock, &OldLevel);
|
||||||
|
@ -1053,11 +1049,8 @@ KsAddIrpToCancelableQueue(
|
||||||
InsertHeadList(QueueHead, &Irp->Tail.Overlay.ListEntry);
|
InsertHeadList(QueueHead, &Irp->Tail.Overlay.ListEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store the spinlock in the device queue list entry,
|
/* store internal queue lock */
|
||||||
* as other fields may have been internally been used
|
KSQUEUE_SPINLOCK_IRP_STORAGE(Irp) = SpinLock;
|
||||||
* used in KsCancelRoutine
|
|
||||||
*/
|
|
||||||
Irp->Tail.Overlay.DeviceQueueEntry.DeviceListEntry.Flink = (PLIST_ENTRY)SpinLock;
|
|
||||||
|
|
||||||
/* now set the cancel routine */
|
/* now set the cancel routine */
|
||||||
OldDriverCancel = IoSetCancelRoutine(Irp, DriverCancel);
|
OldDriverCancel = IoSetCancelRoutine(Irp, DriverCancel);
|
||||||
|
@ -1093,10 +1086,8 @@ KsCancelRoutine(
|
||||||
PKSPIN_LOCK SpinLock;
|
PKSPIN_LOCK SpinLock;
|
||||||
KIRQL OldLevel;
|
KIRQL OldLevel;
|
||||||
|
|
||||||
/* get internal queue lock
|
/* get internal queue lock */
|
||||||
* see KsAddIrpToCancelableQueue
|
SpinLock = KSQUEUE_SPINLOCK_IRP_STORAGE(Irp);
|
||||||
*/
|
|
||||||
SpinLock = (PKSPIN_LOCK)Irp->Tail.Overlay.DeviceQueueEntry.DeviceListEntry.Flink;
|
|
||||||
|
|
||||||
/* acquire spinlock */
|
/* acquire spinlock */
|
||||||
KeAcquireSpinLock(SpinLock, &OldLevel);
|
KeAcquireSpinLock(SpinLock, &OldLevel);
|
||||||
|
|
|
@ -20,6 +20,8 @@ typedef struct
|
||||||
PFNKSCONTEXT_DISPATCH PowerDispatch;
|
PFNKSCONTEXT_DISPATCH PowerDispatch;
|
||||||
PVOID PowerContext;
|
PVOID PowerContext;
|
||||||
LIST_ENTRY PowerDispatchEntry;
|
LIST_ENTRY PowerDispatchEntry;
|
||||||
|
PKSOBJECT_CREATE_ITEM OriginalCreateItem;
|
||||||
|
ACCESS_MASK AccessMask;
|
||||||
|
|
||||||
}KSIOBJECT_HEADER, *PKSIOBJECT_HEADER;
|
}KSIOBJECT_HEADER, *PKSIOBJECT_HEADER;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue