- Fix formatting of some newly added functions before starting heavy work.

svn path=/trunk/; revision=22768
This commit is contained in:
Alex Ionescu 2006-07-02 14:26:25 +00:00
parent fcb77c4c3d
commit fbddf0d1ac

View file

@ -405,7 +405,8 @@ IoQueryFileInformation(IN PFILE_OBJECT FileObject,
/* /*
* @implemented * @implemented
*/ */
NTSTATUS STDCALL NTSTATUS
NTAPI
IoQueryVolumeInformation(IN PFILE_OBJECT FileObject, IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
IN FS_INFORMATION_CLASS FsInformationClass, IN FS_INFORMATION_CLASS FsInformationClass,
IN ULONG Length, IN ULONG Length,
@ -418,24 +419,16 @@ IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
PIRP Irp; PIRP Irp;
NTSTATUS Status; NTSTATUS Status;
ASSERT(FsInformation != NULL);
DPRINT("FsInformation %p\n", FsInformation);
Status = ObReferenceObjectByPointer(FileObject, Status = ObReferenceObjectByPointer(FileObject,
FILE_READ_ATTRIBUTES, FILE_READ_ATTRIBUTES,
IoFileObjectType, IoFileObjectType,
KernelMode); KernelMode);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return(Status);
{
return(Status);
}
DeviceObject = FileObject->DeviceObject; DeviceObject = FileObject->DeviceObject;
Irp = IoAllocateIrp(DeviceObject->StackSize, Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
TRUE); if (!Irp)
if (Irp == NULL)
{ {
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
return(STATUS_INSUFFICIENT_RESOURCES); return(STATUS_INSUFFICIENT_RESOURCES);
@ -461,8 +454,7 @@ IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
StackPtr->Parameters.QueryVolume.FsInformationClass = StackPtr->Parameters.QueryVolume.FsInformationClass =
FsInformationClass; FsInformationClass;
Status = IoCallDriver(DeviceObject, Status = IoCallDriver(DeviceObject, Irp);
Irp);
if (Status == STATUS_PENDING) if (Status == STATUS_PENDING)
{ {
KeWaitForSingleObject(&FileObject->Event, KeWaitForSingleObject(&FileObject->Event,
@ -472,20 +464,16 @@ IoQueryVolumeInformation(IN PFILE_OBJECT FileObject,
NULL); NULL);
Status = IoStatusBlock.Status; Status = IoStatusBlock.Status;
} }
DPRINT("Status %x\n", Status);
if (ReturnedLength != NULL) if (ReturnedLength) *ReturnedLength = IoStatusBlock.Information;
{ return Status;
*ReturnedLength = IoStatusBlock.Information;
}
return(Status);
} }
/* /*
* @unimplemented * @unimplemented
*/ */
NTSTATUS STDCALL NTSTATUS
NTAPI
IoSetInformation(IN PFILE_OBJECT FileObject, IoSetInformation(IN PFILE_OBJECT FileObject,
IN FILE_INFORMATION_CLASS FileInformationClass, IN FILE_INFORMATION_CLASS FileInformationClass,
IN ULONG Length, IN ULONG Length,
@ -497,31 +485,22 @@ IoSetInformation(IN PFILE_OBJECT FileObject,
PIO_STACK_LOCATION StackPtr; PIO_STACK_LOCATION StackPtr;
NTSTATUS Status; NTSTATUS Status;
ASSERT(FileInformation != NULL);
if (FileInformationClass == FileCompletionInformation) if (FileInformationClass == FileCompletionInformation)
{ {
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
Status = ObReferenceObjectByPointer(FileObject, Status = ObReferenceObjectByPointer(FileObject,
0, /* FIXME - depends on the information class */ 0, /* FIXME - depends on the information class */
IoFileObjectType, IoFileObjectType,
KernelMode); KernelMode);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return(Status);
{
return(Status);
}
DPRINT("FileObject 0x%p\n", FileObject);
DeviceObject = FileObject->DeviceObject; DeviceObject = FileObject->DeviceObject;
Irp = IoAllocateIrp(DeviceObject->StackSize, Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
TRUE); if (!Irp)
if (Irp == NULL)
{ {
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
@ -1324,7 +1303,6 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
} }
} }
return Status; return Status;
Cleanup: Cleanup:
@ -1767,7 +1745,7 @@ NtReadFileScatter(IN HANDLE FileHandle,
IN PULONG Key OPTIONAL) IN PULONG Key OPTIONAL)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED); return STATUS_NOT_IMPLEMENTED;
} }
/* /*
@ -2498,35 +2476,14 @@ NtWriteFileGather(IN HANDLE FileHandle,
IN PULONG Key OPTIONAL) IN PULONG Key OPTIONAL)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED); return STATUS_NOT_IMPLEMENTED;
} }
/* /*
* FUNCTION: Queries the volume information
* ARGUMENTS:
* FileHandle = Handle to a file object on the target volume
* ReturnLength = DataWritten
* FsInformation = Caller should supply storage for the information
* structure.
* Length = Size of the information structure
* FsInformationClass = Index to a information structure
*
* FileFsVolumeInformation FILE_FS_VOLUME_INFORMATION
* FileFsLabelInformation FILE_FS_LABEL_INFORMATION
* FileFsSizeInformation FILE_FS_SIZE_INFORMATION
* FileFsDeviceInformation FILE_FS_DEVICE_INFORMATION
* FileFsAttributeInformation FILE_FS_ATTRIBUTE_INFORMATION
* FileFsControlInformation
* FileFsQuotaQueryInformation --
* FileFsQuotaSetInformation --
* FileFsMaximumInformation
*
* RETURNS: Status
*
* @implemented * @implemented
*/ */
NTSTATUS
NTSTATUS STDCALL NTAPI
NtQueryVolumeInformationFile(IN HANDLE FileHandle, NtQueryVolumeInformationFile(IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FsInformation, OUT PVOID FsInformation,
@ -2539,29 +2496,20 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
PIO_STACK_LOCATION StackPtr; PIO_STACK_LOCATION StackPtr;
PVOID SystemBuffer; PVOID SystemBuffer;
KPROCESSOR_MODE PreviousMode; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
DPRINT("FsInformation %p\n", FsInformation);
PreviousMode = ExGetPreviousMode();
if (PreviousMode != KernelMode) if (PreviousMode != KernelMode)
{ {
_SEH_TRY _SEH_TRY
{ {
if (IoStatusBlock != NULL) if (IoStatusBlock)
{ {
ProbeForWrite(IoStatusBlock, ProbeForWrite(IoStatusBlock,
sizeof(IO_STATUS_BLOCK), sizeof(IO_STATUS_BLOCK),
sizeof(ULONG)); sizeof(ULONG));
} }
if (Length != 0) if (Length) ProbeForWrite(FsInformation, Length, 1);
{
ProbeForWrite(FsInformation,
Length,
1);
}
} }
_SEH_HANDLE _SEH_HANDLE
{ {
@ -2574,11 +2522,6 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
return Status; return Status;
} }
} }
else
{
ASSERT(IoStatusBlock != NULL);
ASSERT(FsInformation != NULL);
}
Status = ObReferenceObjectByHandle(FileHandle, Status = ObReferenceObjectByHandle(FileHandle,
0, /* FIXME - depends on the information class! */ 0, /* FIXME - depends on the information class! */
@ -2586,29 +2529,23 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
PreviousMode, PreviousMode,
(PVOID*)&FileObject, (PVOID*)&FileObject,
NULL); NULL);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return Status;
{
return(Status);
}
DeviceObject = FileObject->DeviceObject; DeviceObject = FileObject->DeviceObject;
Irp = IoAllocateIrp(DeviceObject->StackSize, Irp = IoAllocateIrp(DeviceObject->StackSize, TRUE);
TRUE); if (!Irp)
if (Irp == NULL)
{ {
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
return(STATUS_INSUFFICIENT_RESOURCES); return STATUS_INSUFFICIENT_RESOURCES;
} }
SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, Length, TAG_SYSB);
Length, if (!SystemBuffer)
TAG_SYSB);
if (SystemBuffer == NULL)
{ {
IoFreeIrp(Irp); IoFreeIrp(Irp);
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
return(STATUS_INSUFFICIENT_RESOURCES); return STATUS_INSUFFICIENT_RESOURCES;
} }
/* Trigger FileObject/Event dereferencing */ /* Trigger FileObject/Event dereferencing */
@ -2632,8 +2569,7 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
StackPtr->Parameters.QueryVolume.FsInformationClass = StackPtr->Parameters.QueryVolume.FsInformationClass =
FsInformationClass; FsInformationClass;
Status = IoCallDriver(DeviceObject, Status = IoCallDriver(DeviceObject, Irp);
Irp);
if (Status == STATUS_PENDING) if (Status == STATUS_PENDING)
{ {
KeWaitForSingleObject(&FileObject->Event, KeWaitForSingleObject(&FileObject->Event,
@ -2643,13 +2579,11 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
NULL); NULL);
Status = IoStatusBlock->Status; Status = IoStatusBlock->Status;
} }
DPRINT("Status %x\n", Status);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
_SEH_TRY _SEH_TRY
{ {
DPRINT("Information %lu\n", IoStatusBlock->Information);
RtlCopyMemory(FsInformation, RtlCopyMemory(FsInformation,
SystemBuffer, SystemBuffer,
IoStatusBlock->Information); IoStatusBlock->Information);
@ -2662,14 +2596,14 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
} }
ExFreePool(SystemBuffer); ExFreePool(SystemBuffer);
return Status;
return(Status);
} }
/* /*
* @implemented * @implemented
*/ */
NTSTATUS STDCALL NTSTATUS
NTAPI
NtSetVolumeInformationFile(IN HANDLE FileHandle, NtSetVolumeInformationFile(IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PVOID FsInformation, IN PVOID FsInformation,
@ -2679,31 +2613,23 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
PFILE_OBJECT FileObject; PFILE_OBJECT FileObject;
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
PIRP Irp; PIRP Irp;
NTSTATUS Status; NTSTATUS Status = STATUS_SUCCESS;
PIO_STACK_LOCATION StackPtr; PIO_STACK_LOCATION StackPtr;
PVOID SystemBuffer; PVOID SystemBuffer;
KPROCESSOR_MODE PreviousMode; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PreviousMode = ExGetPreviousMode();
if (PreviousMode != KernelMode) if (PreviousMode != KernelMode)
{ {
Status = STATUS_SUCCESS;
_SEH_TRY _SEH_TRY
{ {
if (IoStatusBlock != NULL) if (IoStatusBlock)
{ {
ProbeForWrite(IoStatusBlock, ProbeForWrite(IoStatusBlock,
sizeof(IO_STATUS_BLOCK), sizeof(IO_STATUS_BLOCK),
sizeof(ULONG)); sizeof(ULONG));
} }
if (Length != 0) if (Length) ProbeForRead(FsInformation, Length, 1);
{
ProbeForRead(FsInformation,
Length,
1);
}
} }
_SEH_HANDLE _SEH_HANDLE
{ {
@ -2711,15 +2637,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
} }
_SEH_END; _SEH_END;
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status)) return Status;
{
return Status;
}
}
else
{
ASSERT(IoStatusBlock != NULL);
ASSERT(FsInformation != NULL);
} }
Status = ObReferenceObjectByHandle(FileHandle, Status = ObReferenceObjectByHandle(FileHandle,
@ -2728,24 +2646,19 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
PreviousMode, PreviousMode,
(PVOID*)&FileObject, (PVOID*)&FileObject,
NULL); NULL);
if (Status != STATUS_SUCCESS) if (Status != STATUS_SUCCESS) return Status;
{
return(Status);
}
DeviceObject = FileObject->DeviceObject; DeviceObject = FileObject->DeviceObject;
Irp = IoAllocateIrp(DeviceObject->StackSize,TRUE); Irp = IoAllocateIrp(DeviceObject->StackSize,TRUE);
if (Irp == NULL) if (!Irp)
{ {
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
return(STATUS_INSUFFICIENT_RESOURCES); return STATUS_INSUFFICIENT_RESOURCES;
} }
SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, SystemBuffer = ExAllocatePoolWithTag(NonPagedPool, Length, TAG_SYSB);
Length, if (!SystemBuffer)
TAG_SYSB);
if (SystemBuffer == NULL)
{ {
Status = STATUS_INSUFFICIENT_RESOURCES; Status = STATUS_INSUFFICIENT_RESOURCES;
goto failfreeirp; goto failfreeirp;
@ -2756,9 +2669,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
_SEH_TRY _SEH_TRY
{ {
/* no need to probe again */ /* no need to probe again */
RtlCopyMemory(SystemBuffer, RtlCopyMemory(SystemBuffer, FsInformation, Length);
FsInformation,
Length);
} }
_SEH_HANDLE _SEH_HANDLE
{ {
@ -2768,8 +2679,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ExFreePoolWithTag(SystemBuffer, ExFreePoolWithTag(SystemBuffer, TAG_SYSB);
TAG_SYSB);
failfreeirp: failfreeirp:
IoFreeIrp(Irp); IoFreeIrp(Irp);
ObDereferenceObject(FileObject); ObDereferenceObject(FileObject);
@ -2778,9 +2688,7 @@ failfreeirp:
} }
else else
{ {
RtlCopyMemory(SystemBuffer, RtlCopyMemory(SystemBuffer, FsInformation, Length);
FsInformation,
Length);
} }
/* Trigger FileObject/Event dereferencing */ /* Trigger FileObject/Event dereferencing */
@ -2823,6 +2731,5 @@ failfreeirp:
} }
ExFreePool(SystemBuffer); ExFreePool(SystemBuffer);
return Status;
return(Status);
} }