xbox-kernel/private/ntos/io/create.c
2020-09-30 17:17:25 +02:00

166 lines
4.4 KiB
C

/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
create.c
Abstract
This module contains the code to implement the NtCreateFile
and NtOpenFile system services.
Author:
Darryl E. Havens (darrylh) 14-Apr-1989
Environment:
Kernel mode
Revision History:
--*/
#include "iop.h"
NTSTATUS
NtCreateFile(
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN PLARGE_INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions
)
/*++
Routine Description:
This service opens or creates a file, or opens a device. It is used to
establish a file handle to the open device/file that can then be used
in subsequent operations to perform I/O operations on. For purposes of
readability, files and devices are treated as "files" throughout the
majority of this module and the system service portion of the I/O system.
The only time a distinction is made is when it is important to determine
which is really being accessed. Then a distinction is also made in the
comments.
Arguments:
FileHandle - A pointer to a variable to receive the handle to the open file.
DesiredAccess - Supplies the types of access that the caller would like to
the file.
ObjectAttributes - Supplies the attributes to be used for file object (name,
SECURITY_DESCRIPTOR, etc.)
IoStatusBlock - Specifies the address of the caller's I/O status block.
AllocationSize - Initial size that should be allocated to the file. This
parameter only has an affect if the file is created. Further, if
not specified, then it is taken to mean zero.
FileAttributes - Specifies the attributes that should be set on the file,
if it is created.
ShareAccess - Supplies the types of share access that the caller would like
to the file.
CreateDisposition - Supplies the method for handling the create/open.
CreateOptions - Caller options for how to perform the create/open.
Return Value:
The function value is the final status of the create/open operation.
--*/
{
//
// Simply invoke the common I/O file creation routine to do the work.
//
PAGED_CODE();
return IoCreateFile( FileHandle,
DesiredAccess,
ObjectAttributes,
IoStatusBlock,
AllocationSize,
FileAttributes,
ShareAccess,
CreateDisposition,
CreateOptions,
0 );
}
NTSTATUS
NtOpenFile(
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG ShareAccess,
IN ULONG OpenOptions
)
/*++
Routine Description:
This service opens a file or a device. It is used to establish a file
handle to the open device/file that can then be used in subsequent
operations to perform I/O operations on.
Arguments:
FileHandle - A pointer to a variable to receive the handle to the open file.
DesiredAccess - Supplies the types of access that the caller would like to
the file.
ObjectAttributes - Supplies the attributes to be used for file object (name,
SECURITY_DESCRIPTOR, etc.)
IoStatusBlock - Specifies the address of the caller's I/O status block.
ShareAccess - Supplies the types of share access that the caller would like
to the file.
OpenOptions - Caller options for how to perform the open.
Return Value:
The function value is the final completion status of the open/create
operation.
--*/
{
//
// Simply invoke the common I/O file creation routine to perform the work.
//
PAGED_CODE();
return IoCreateFile( FileHandle,
DesiredAccess,
ObjectAttributes,
IoStatusBlock,
(PLARGE_INTEGER) NULL,
0L,
ShareAccess,
FILE_OPEN,
OpenOptions,
0 );
}