mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 06:33:01 +00:00
Add the SYNCHRONIZE flag to the DesiredAccess parameter when using the flags FILE_SYNCHRONOUS_IO_(NON)ALERT in NtCreateFile or NtOpenFile, even if one uses DesiredAccess == GENERIC_xxx (which should map to some FILE_GENERIC_xxx already containing the SYNCHRONIZE flag).
Indeed, it appears after extended testing that, when calling from user-mode, Windows checks the real presence of the SYNCHRONIZE flag when using FILE_SYNCHRONOUS_IO_(NON)ALERT even if we pass any of the GENERIC_xxx access flags... Otherwise, when using FILE_GENERIC_(READ/WRITE) flags directly, there is no need to add the SYNCHRONIZE flag since it is already incorporated in it. See CORE-7361 for more details. svn path=/trunk/; revision=59514
This commit is contained in:
parent
29dcad6c4e
commit
072209491b
9 changed files with 21 additions and 13 deletions
|
@ -535,11 +535,11 @@ OpenFile(LPCSTR lpFileName,
|
||||||
ObjectAttributes.SecurityQualityOfService = NULL;
|
ObjectAttributes.SecurityQualityOfService = NULL;
|
||||||
|
|
||||||
errCode = NtOpenFile (&FileHandle,
|
errCode = NtOpenFile (&FileHandle,
|
||||||
GENERIC_READ|SYNCHRONIZE,
|
GENERIC_READ | SYNCHRONIZE,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
FILE_SHARE_READ,
|
FILE_SHARE_READ,
|
||||||
FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT);
|
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT);
|
||||||
|
|
||||||
RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameString.Buffer);
|
RtlFreeHeap(RtlGetProcessHeap(), 0, FileNameString.Buffer);
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ CreatePipe(PHANDLE hReadPipe,
|
||||||
|
|
||||||
/* Now try opening it for write access */
|
/* Now try opening it for write access */
|
||||||
Status = NtOpenFile(&WritePipeHandle,
|
Status = NtOpenFile(&WritePipeHandle,
|
||||||
FILE_GENERIC_WRITE | SYNCHRONIZE,
|
FILE_GENERIC_WRITE,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&StatusBlock,
|
&StatusBlock,
|
||||||
FILE_SHARE_READ,
|
FILE_SHARE_READ,
|
||||||
|
|
|
@ -967,7 +967,7 @@ GetVolumeNameForVolumeMountPointW(
|
||||||
|
|
||||||
RtlInitUnicodeString(&NtFileName, L"\\??\\MountPointManager");
|
RtlInitUnicodeString(&NtFileName, L"\\??\\MountPointManager");
|
||||||
InitializeObjectAttributes(&ObjectAttributes, &NtFileName, 0, NULL, NULL);
|
InitializeObjectAttributes(&ObjectAttributes, &NtFileName, 0, NULL, NULL);
|
||||||
Status = NtOpenFile(&FileHandle, FILE_GENERIC_READ | SYNCHRONIZE, &ObjectAttributes,
|
Status = NtOpenFile(&FileHandle, FILE_GENERIC_READ, &ObjectAttributes,
|
||||||
&Iosb, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
&Iosb, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
|
|
@ -887,7 +887,7 @@ AccpOpenNamedObject(LPWSTR pObjectName,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
Status = NtOpenFile(Handle,
|
Status = NtOpenFile(Handle,
|
||||||
DesiredAccess,
|
DesiredAccess /* | SYNCHRONIZE */,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
|
||||||
|
|
|
@ -1618,7 +1618,11 @@ static NTSTATUS open_nt_file( HANDLE *handle, UNICODE_STRING *name )
|
||||||
attr.ObjectName = name;
|
attr.ObjectName = name;
|
||||||
attr.SecurityDescriptor = NULL;
|
attr.SecurityDescriptor = NULL;
|
||||||
attr.SecurityQualityOfService = NULL;
|
attr.SecurityQualityOfService = NULL;
|
||||||
return NtOpenFile( handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_ALERT );
|
return NtOpenFile(handle,
|
||||||
|
GENERIC_READ | SYNCHRONIZE,
|
||||||
|
&attr, &io,
|
||||||
|
FILE_SHARE_READ,
|
||||||
|
FILE_SYNCHRONOUS_IO_ALERT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, USHORT extra_len )
|
static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, USHORT extra_len )
|
||||||
|
@ -1952,8 +1956,11 @@ static NTSTATUS lookup_winsxs(struct actctx_loader* acl, struct assembly_identit
|
||||||
attr.SecurityDescriptor = NULL;
|
attr.SecurityDescriptor = NULL;
|
||||||
attr.SecurityQualityOfService = NULL;
|
attr.SecurityQualityOfService = NULL;
|
||||||
|
|
||||||
if (!NtOpenFile( &handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
if (!NtOpenFile(&handle,
|
||||||
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT ))
|
GENERIC_READ | SYNCHRONIZE,
|
||||||
|
&attr, &io,
|
||||||
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
|
FILE_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT))
|
||||||
{
|
{
|
||||||
sxs_ai = *ai;
|
sxs_ai = *ai;
|
||||||
file = lookup_manifest_file( handle, &sxs_ai );
|
file = lookup_manifest_file( handle, &sxs_ai );
|
||||||
|
|
|
@ -168,7 +168,7 @@ IopWriteLogFile(PWSTR LogText)
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
Status = ZwCreateFile(&FileHandle,
|
Status = ZwCreateFile(&FileHandle,
|
||||||
FILE_APPEND_DATA,
|
FILE_APPEND_DATA | SYNCHRONIZE,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
|
@ -161,7 +161,7 @@ IopStartRamdisk(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||||
// Open a handle to the driver
|
// Open a handle to the driver
|
||||||
//
|
//
|
||||||
Status = ZwOpenFile(&DriverHandle,
|
Status = ZwOpenFile(&DriverHandle,
|
||||||
GENERIC_ALL,
|
GENERIC_ALL | SYNCHRONIZE,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
|
|
|
@ -3578,7 +3578,8 @@ KdbpCliInit()
|
||||||
InitializeObjectAttributes(&ObjectAttributes, &FileName, 0, NULL, NULL);
|
InitializeObjectAttributes(&ObjectAttributes, &FileName, 0, NULL, NULL);
|
||||||
|
|
||||||
/* Open the file */
|
/* Open the file */
|
||||||
Status = ZwOpenFile(&hFile, FILE_READ_DATA, &ObjectAttributes, &Iosb, 0,
|
Status = ZwOpenFile(&hFile, FILE_READ_DATA | SYNCHRONIZE,
|
||||||
|
&ObjectAttributes, &Iosb, 0,
|
||||||
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT |
|
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT |
|
||||||
FILE_NO_INTERMEDIATE_BUFFERING);
|
FILE_NO_INTERMEDIATE_BUFFERING);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
|
|
@ -391,10 +391,10 @@ KdbpSymLoadModuleSymbols(
|
||||||
DPRINT("Attempting to open image: %wZ\n", FileName);
|
DPRINT("Attempting to open image: %wZ\n", FileName);
|
||||||
|
|
||||||
Status = ZwOpenFile(&FileHandle,
|
Status = ZwOpenFile(&FileHandle,
|
||||||
FILE_READ_ACCESS,
|
FILE_READ_ACCESS | SYNCHRONIZE,
|
||||||
&ObjectAttributes,
|
&ObjectAttributes,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
FILE_SHARE_READ|FILE_SHARE_WRITE,
|
FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||||
FILE_SYNCHRONOUS_IO_NONALERT);
|
FILE_SYNCHRONOUS_IO_NONALERT);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue