*** empty log message ***

svn path=/trunk/; revision=3298
This commit is contained in:
Robert Kopferl 2002-07-23 13:00:11 +00:00
parent 77fce8841d
commit a6c291342a
2 changed files with 245 additions and 0 deletions

View file

@ -0,0 +1,59 @@
/* $Id: devices.cpp,v 1.1 2002/07/23 13:00:10 robertk Exp $
*/
/*
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS OS/2 sub system
* FILE: devices.c
* PURPOSE: Kernelservices for OS/2 apps
* PROGRAMMER: Robert K. nonvolatil@yahoo.de
* REVISION HISTORY:
* 13-03-2002 Created
*/
#define INCL_DOSDEVICES
#include "../../../include/os2.h"
#include <ddk/ntddk.h>
/*******************************************/
/* DosDevIOCtl performs control functions */
/* on a device specified by an opened */
/* device handle. */
/*******************************************/
/*HFILE hDevice; Device handle returned by DosOpen, or a standard (open) device handle. */
/*ULONG category; Device category. */
/*ULONG function; Device-specific function code. */
/*PVOID pParams; Address of the command-specific argument list. */
/*ULONG cbParmLenMax; Length, in bytes, of pParams. */
/*PULONG pcbParmLen; Pointer to the length of parameters. */
/*PVOID pData; Address of the data area. */
/*ULONG cbDataLenMax; Length, in bytes, of pData. */
/*PULONG pcbDataLen; Pointer to the length of data. */
/*APIRET ulrc; Return Code.
ulrc (APIRET) - returns
Return Code.
DosDevIOCtl returns one of the following values:
0 NO_ERROR
1 ERROR_INVALID_FUNCTION
6 ERROR_INVALID_HANDLE
15 ERROR_INVALID_DRIVE
31 ERROR_GEN_FAILURE
87 ERROR_INVALID_PARAMETER
111 ERROR_BUFFER_OVERFLOW
115 ERROR_PROTECTION_VIOLATION
117 ERROR_INVALID_CATEGORY
119 ERROR_BAD_DRIVER_LEVEL
163 ERROR_UNCERTAIN_MEDIA
165 ERROR_MONITORS_NOT_SUPPORTED
*/
APIRET STDCALL Dos32DevIOCtl(HFILE hDevice, ULONG category, ULONG function,
PVOID pParams,ULONG cbParmLenMax,PULONG pcbParmLen,
PVOID pData,ULONG cbDataLenMax,PULONG pcbDataLen)
{
return 0;
}

View file

@ -0,0 +1,186 @@
/* $Id: openclose.cpp,v 1.1 2002/07/23 13:00:11 robertk Exp $
*/
/*
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS OS/2 sub system
* FILE: dll/doscalls.c
* PURPOSE: Kernelservices for OS/2 apps
* PROGRAMMER: Robert K. nonvolatil@yahoo.de
* REVISION HISTORY:
* 13-03-2002 Created
*/
#define INCL_DOSFILEMGR
#include "../../../include/os2.h"
#include <ddk/ntddk.h>
APIRET STDCALL Dos32Open(PSZ pszFileName, PHFILE pHf,
PULONG pulAction, ULONG cbFile,
ULONG ulAttribute, ULONG fsOpenFlags,
ULONG fsOpenMode, PVOID reserved ) //ULONGPEAOP2 peaop2)
{
/* NTAPI
ZwCreateFile(
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,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength
);*/
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
UNICODE_STRING NtPathU;
HANDLE FileHandle;
NTSTATUS Status;
ULONG Flags = 0;
switch (dwCreationDisposition)
{
case CREATE_NEW:
dwCreationDisposition = FILE_CREATE;
break;
case CREATE_ALWAYS:
dwCreationDisposition = FILE_OVERWRITE_IF;
break;
case OPEN_EXISTING:
dwCreationDisposition = FILE_OPEN;
break;
case OPEN_ALWAYS:
dwCreationDisposition = OPEN_ALWAYS;
break;
case TRUNCATE_EXISTING:
dwCreationDisposition = FILE_OVERWRITE;
}
DPRINT("CreateFileW(lpFileName %S)\n",lpFileName);
if (dwDesiredAccess & GENERIC_READ)
dwDesiredAccess |= FILE_GENERIC_READ;
if (dwDesiredAccess & GENERIC_WRITE)
dwDesiredAccess |= FILE_GENERIC_WRITE;
if (!(dwFlagsAndAttributes & FILE_FLAG_OVERLAPPED))
{
Flags |= FILE_SYNCHRONOUS_IO_ALERT;
}
if (!RtlDosPathNameToNtPathName_U ((LPWSTR)lpFileName,
&NtPathU,
NULL,
NULL))
return INVALID_HANDLE_VALUE;
DPRINT("NtPathU \'%S\'\n", NtPathU.Buffer);
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
ObjectAttributes.RootDirectory = NULL;
ObjectAttributes.ObjectName = &NtPathU;
ObjectAttributes.Attributes = OBJ_CASE_INSENSITIVE;
ObjectAttributes.SecurityDescriptor = NULL;
ObjectAttributes.SecurityQualityOfService = NULL;
Status = NtCreateFile (&FileHandle,
dwDesiredAccess,
&ObjectAttributes,
&IoStatusBlock,
NULL,
dwFlagsAndAttributes,
dwShareMode,
dwCreationDisposition,
Flags,
NULL,
0);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return INVALID_HANDLE_VALUE;
}
return FileHandle;
return 0;
}
/* close a Handle. seems finished */
APIRET STDCALL Dos32Close(HFILE hFile)
{
NTSTATUS nErrCode;
nErrCode = NtClose( (HANDLE)hFile );
switch( nErrCode )
{
case STATUS_SUCCESS:
return NO_ERROR;
case STATUS_INVALID_HANDLE:
return ERROR_INVALID_HANDLE;
case STATUS_HANDLE_NOT_CLOSABLE:
return ERROR_FILE_NOT_FOUND;
}
return nErrCode;
}
APIRET STDCALL Dos32Read(HFILE hFile, PVOID pBuffer,
ULONG cbRead, PULONG pcbActual)
{
NTSTATUS nErrCode;
IO_STATUS_BLOCK isbStatus;
// read data from file
nErrCode = NtReadFile( (HANDLE)hFile, NULL, NULL, NULL,
&isbStatus, pBuffer, cbRead,
NULL, NULL );
// contains the # bytes actually read.
*pcbActual = isbStatus.Information;
switch(nErrCode)
{
case STATUS_INVALID_HANDLE:
return ERROR_INVALID_HANDLE;
// FIXME: complete this
}
return NO_ERROR;
}
/* Generic write to a stream given by hFile */
APIRET STDCALL Dos32Write(HFILE hFile, PVOID pBuffer,
ULONG cbWrite, PULONG pcbActual)
{
NTSTATUS nErrCode;
IO_STATUS_BLOCK StatusBlk;
nErrCode = NtWriteFile( (HANDLE)hFile, NULL, NULL, NULL,
&StatusBlk, pBuffer, cbWrite, 0, NULL );
*pcbActual = StatusBlk.Information;
// do an errorcode translation FIXME: correct
switch(nErrCode)
{
case STATUS_SUCCESS:
case STATUS_PENDING:
case STATUS_ACCESS_DENIED:
case STATUS_INVALID_HANDLE:
case STATUS_FILE_LOCK_CONFLICT:
return 0;
}
return 0;
}