mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:33:10 +00:00
- Implement IoFastQueryNetworkAttributes which is now a piece of cake thanks to a properly implemented IopParseDevice.
svn path=/trunk/; revision=22934
This commit is contained in:
parent
0a2769494f
commit
c4cfd65ad0
1 changed files with 69 additions and 8 deletions
|
@ -2034,17 +2034,78 @@ NtDeleteFile(IN POBJECT_ATTRIBUTES ObjectAttributes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @unimplemented
|
* @implemented
|
||||||
*/
|
*/
|
||||||
BOOLEAN STDCALL
|
BOOLEAN
|
||||||
|
NTAPI
|
||||||
IoFastQueryNetworkAttributes(IN POBJECT_ATTRIBUTES ObjectAttributes,
|
IoFastQueryNetworkAttributes(IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||||
IN ACCESS_MASK DesiredAccess,
|
IN ACCESS_MASK DesiredAccess,
|
||||||
IN ULONG OpenOptions,
|
IN ULONG OpenOptions,
|
||||||
OUT PIO_STATUS_BLOCK IoStatus,
|
OUT PIO_STATUS_BLOCK IoStatus,
|
||||||
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer)
|
OUT PFILE_NETWORK_OPEN_INFORMATION Buffer)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
return(FALSE);
|
DUMMY_FILE_OBJECT DummyFileObject;
|
||||||
|
HANDLE Handle;
|
||||||
|
OPEN_PACKET OpenPacket;
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
/* Setup the Open Packet */
|
||||||
|
OpenPacket.Type = IO_TYPE_OPEN_PACKET;
|
||||||
|
OpenPacket.Size = sizeof(OPEN_PACKET);
|
||||||
|
OpenPacket.FileObject = NULL;
|
||||||
|
OpenPacket.FinalStatus = STATUS_SUCCESS;
|
||||||
|
OpenPacket.Information = 0;
|
||||||
|
OpenPacket.ParseCheck = 0;
|
||||||
|
OpenPacket.RelatedFileObject = NULL;
|
||||||
|
OpenPacket.AllocationSize.QuadPart = 0;
|
||||||
|
OpenPacket.CreateOptions = OpenOptions | FILE_OPEN_REPARSE_POINT;
|
||||||
|
OpenPacket.FileAttributes = 0;
|
||||||
|
OpenPacket.ShareAccess = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
|
||||||
|
OpenPacket.EaBuffer = NULL;
|
||||||
|
OpenPacket.EaLength = 0;
|
||||||
|
OpenPacket.Options = IO_FORCE_ACCESS_CHECK;
|
||||||
|
OpenPacket.Disposition = FILE_OPEN;
|
||||||
|
OpenPacket.BasicInformation = NULL;
|
||||||
|
OpenPacket.NetworkInformation = Buffer;
|
||||||
|
OpenPacket.CreateFileType = 0;
|
||||||
|
OpenPacket.MailslotOrPipeParameters = NULL;
|
||||||
|
OpenPacket.Override = FALSE;
|
||||||
|
OpenPacket.QueryOnly = TRUE;
|
||||||
|
OpenPacket.DeleteOnly = FALSE;
|
||||||
|
OpenPacket.FullAttributes = TRUE;
|
||||||
|
OpenPacket.DummyFileObject = &DummyFileObject;
|
||||||
|
OpenPacket.InternalFlags = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt opening the file. This will call the I/O Parse Routine for
|
||||||
|
* the File Object (IopParseDevice) which will use the dummy file obejct
|
||||||
|
* send the IRP to its device object. Note that we have two statuses
|
||||||
|
* to worry about: the Object Manager's status (in Status) and the I/O
|
||||||
|
* status, which is in the Open Packet's Final Status, and determined
|
||||||
|
* by the Parse Check member.
|
||||||
|
*/
|
||||||
|
Status = ObOpenObjectByName(ObjectAttributes,
|
||||||
|
NULL,
|
||||||
|
KernelMode,
|
||||||
|
NULL,
|
||||||
|
DesiredAccess,
|
||||||
|
&OpenPacket,
|
||||||
|
&Handle);
|
||||||
|
if (OpenPacket.ParseCheck != TRUE)
|
||||||
|
{
|
||||||
|
/* Parse failed */
|
||||||
|
IoStatus->Status = Status;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Use the Io status */
|
||||||
|
IoStatus->Status = OpenPacket.FinalStatus;
|
||||||
|
IoStatus->Information = OpenPacket.Information;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return success */
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue