[NTOSKRNL_VISTA][XDK] Implement IoSetMasterIrpStatus

This commit is contained in:
Victor Perevertkin 2020-08-29 05:44:34 +03:00
parent f0ffda34da
commit d9864ca6c5
No known key found for this signature in database
GPG key ID: C750B7222E9C7830
2 changed files with 35 additions and 12 deletions

View file

@ -2332,19 +2332,16 @@ IoSetShareAccessEx(
_Out_ PSHARE_ACCESS ShareAccess, _Out_ PSHARE_ACCESS ShareAccess,
_In_ PBOOLEAN WritePermission); _In_ PBOOLEAN WritePermission);
NTKERNELAPI
ULONG ULONG
NTAPI NTAPI
IoSizeofWorkItem(VOID); IoSizeofWorkItem(VOID);
NTKERNELAPI
VOID VOID
NTAPI NTAPI
IoInitializeWorkItem( IoInitializeWorkItem(
_In_ PVOID IoObject, _In_ PVOID IoObject,
_Out_ PIO_WORKITEM IoWorkItem); _Out_ PIO_WORKITEM IoWorkItem);
NTKERNELAPI
VOID VOID
NTAPI NTAPI
IoUninitializeWorkItem( IoUninitializeWorkItem(
@ -2360,20 +2357,18 @@ IoQueueWorkItemEx(
_In_ WORK_QUEUE_TYPE QueueType, _In_ WORK_QUEUE_TYPE QueueType,
_In_opt_ __drv_aliasesMem PVOID Context); _In_opt_ __drv_aliasesMem PVOID Context);
NTKERNELAPI // NTKERNELAPI // HACK: ntoskrnl_vista functions are statically linked thus don't need DECLSPEC_IMPORT
IO_PRIORITY_HINT IO_PRIORITY_HINT
NTAPI NTAPI
IoGetIoPriorityHint( IoGetIoPriorityHint(
_In_ PIRP Irp); _In_ PIRP Irp);
// NTKERNELAPI // HACK: ntoskrnl_vista functions are statically linked thus don't need DECLSPEC_IMPORT
NTSTATUS NTSTATUS
NTAPI NTAPI
IoSetIoPriorityHint( IoSetIoPriorityHint(
_In_ PIRP Irp, _In_ PIRP Irp,
_In_ IO_PRIORITY_HINT PriorityHint); _In_ IO_PRIORITY_HINT PriorityHint);
NTKERNELAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
IoAllocateSfioStreamIdentifier( IoAllocateSfioStreamIdentifier(
@ -2388,7 +2383,6 @@ IoGetSfioStreamIdentifier(
_In_ PFILE_OBJECT FileObject, _In_ PFILE_OBJECT FileObject,
_In_ PVOID Signature); _In_ PVOID Signature);
NTKERNELAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
IoFreeSfioStreamIdentifier( IoFreeSfioStreamIdentifier(
@ -2445,7 +2439,6 @@ IoUpdateDiskGeometry(
_In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry, _In_ struct _DISK_GEOMETRY_EX* OldDiskGeometry,
_In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry); _In_ struct _DISK_GEOMETRY_EX* NewDiskGeometry);
NTKERNELAPI
PTXN_PARAMETER_BLOCK PTXN_PARAMETER_BLOCK
NTAPI NTAPI
IoGetTransactionParameterBlock( IoGetTransactionParameterBlock(
@ -2471,14 +2464,12 @@ IoCreateFileEx(
_In_ ULONG Options, _In_ ULONG Options,
_In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext); _In_opt_ PIO_DRIVER_CREATE_CONTEXT DriverContext);
NTKERNELAPI
NTSTATUS NTSTATUS
NTAPI NTAPI
IoSetIrpExtraCreateParameter( IoSetIrpExtraCreateParameter(
_Inout_ PIRP Irp, _Inout_ PIRP Irp,
_In_ struct _ECP_LIST *ExtraCreateParameter); _In_ struct _ECP_LIST *ExtraCreateParameter);
NTKERNELAPI
VOID VOID
NTAPI NTAPI
IoClearIrpExtraCreateParameter( IoClearIrpExtraCreateParameter(
@ -2491,7 +2482,6 @@ IoGetIrpExtraCreateParameter(
_In_ PIRP Irp, _In_ PIRP Irp,
_Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter); _Outptr_result_maybenull_ struct _ECP_LIST **ExtraCreateParameter);
NTKERNELAPI
BOOLEAN BOOLEAN
NTAPI NTAPI
IoIsFileObjectIgnoringSharing( IoIsFileObjectIgnoringSharing(
@ -2608,6 +2598,8 @@ $endif (_NTIFS_)
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
#if (NTDDI_VERSION >= NTDDI_WIN8) #if (NTDDI_VERSION >= NTDDI_WIN8)
$if (_WDMDDK_)
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_ _Must_inspect_result_
// NTKERNELAPI // HACK: ntoskrnl_vista functions are statically linked thus don't need DECLSPEC_IMPORT // NTKERNELAPI // HACK: ntoskrnl_vista functions are statically linked thus don't need DECLSPEC_IMPORT
@ -2634,6 +2626,16 @@ IoGetDeviceInterfacePropertyData (
_Out_writes_bytes_to_(Size, *RequiredSize) PVOID Data, _Out_writes_bytes_to_(Size, *RequiredSize) PVOID Data,
_Out_ PULONG RequiredSize, _Out_ PULONG RequiredSize,
_Out_ PDEVPROPTYPE Type); _Out_ PDEVPROPTYPE Type);
$endif (_WDMDDK_)
$if (_NTDDK_)
// NTKERNELAPI // HACK: ntoskrnl_vista functions are statically linked thus don't need DECLSPEC_IMPORT
VOID
IoSetMasterIrpStatus(
_Inout_ PIRP MasterIrp,
_In_ NTSTATUS Status);
$endif (_NTDDK_)
#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */ #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
$if (_WDMDDK_) $if (_WDMDDK_)

View file

@ -108,3 +108,24 @@ IoGetIoPriorityHint(
{ {
return IoPriorityNormal; return IoPriorityNormal;
} }
NTKERNELAPI
VOID
IoSetMasterIrpStatus(
_Inout_ PIRP MasterIrp,
_In_ NTSTATUS Status)
{
NTSTATUS MasterStatus = MasterIrp->IoStatus.Status;
if (Status == STATUS_FT_READ_FROM_COPY)
{
return;
}
if ((Status == STATUS_VERIFY_REQUIRED) ||
(MasterStatus == STATUS_SUCCESS && !NT_SUCCESS(Status)) ||
(!NT_SUCCESS(MasterStatus) && !NT_SUCCESS(Status) && Status > MasterStatus))
{
MasterIrp->IoStatus.Status = Status;
}
}