mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Implemented GetFileType()
Some cleanup svn path=/trunk/; revision=1374
This commit is contained in:
parent
31f697ce8f
commit
f3632d15b8
1 changed files with 127 additions and 56 deletions
|
@ -1,4 +1,4 @@
|
|||
/* $Id: file.c,v 1.23 2000/06/03 14:47:32 ea Exp $
|
||||
/* $Id: file.c,v 1.24 2000/10/01 19:54:57 ekohl Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
|
@ -229,6 +229,71 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
|||
|
||||
DWORD STDCALL GetFileType(HANDLE hFile)
|
||||
{
|
||||
FILE_FS_DEVICE_INFORMATION DeviceInfo;
|
||||
IO_STATUS_BLOCK StatusBlock;
|
||||
NTSTATUS Status;
|
||||
|
||||
/* get real handle */
|
||||
switch ((ULONG)hFile)
|
||||
{
|
||||
case STD_INPUT_HANDLE:
|
||||
hFile = NtCurrentPeb()->ProcessParameters->InputHandle;
|
||||
break;
|
||||
|
||||
case STD_OUTPUT_HANDLE:
|
||||
hFile = NtCurrentPeb()->ProcessParameters->OutputHandle;
|
||||
break;
|
||||
|
||||
case STD_ERROR_HANDLE:
|
||||
hFile = NtCurrentPeb()->ProcessParameters->ErrorHandle;
|
||||
break;
|
||||
}
|
||||
|
||||
/* check console handles */
|
||||
if (((ULONG)hFile & 3) == 3)
|
||||
{
|
||||
// if (VerifyConsoleHandle(hFile))
|
||||
return FILE_TYPE_CHAR;
|
||||
}
|
||||
|
||||
Status = NtQueryVolumeInformationFile(hFile,
|
||||
&StatusBlock,
|
||||
&DeviceInfo,
|
||||
sizeof(FILE_FS_DEVICE_INFORMATION),
|
||||
FileFsDeviceInformation);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastErrorByStatus(Status);
|
||||
return FILE_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
switch (DeviceInfo.DeviceType)
|
||||
{
|
||||
case FILE_DEVICE_CD_ROM:
|
||||
case FILE_DEVICE_CD_ROM_FILE_SYSTEM:
|
||||
case FILE_DEVICE_CONTROLLER:
|
||||
case FILE_DEVICE_DATALINK:
|
||||
case FILE_DEVICE_DFS:
|
||||
case FILE_DEVICE_DISK:
|
||||
case FILE_DEVICE_DISK_FILE_SYSTEM:
|
||||
case FILE_DEVICE_VIRTUAL_DISK:
|
||||
return FILE_TYPE_DISK;
|
||||
|
||||
case FILE_DEVICE_KEYBOARD:
|
||||
case FILE_DEVICE_MOUSE:
|
||||
case FILE_DEVICE_NULL:
|
||||
case FILE_DEVICE_PARALLEL_PORT:
|
||||
case FILE_DEVICE_PRINTER:
|
||||
case FILE_DEVICE_SERIAL_PORT:
|
||||
case FILE_DEVICE_SCREEN:
|
||||
case FILE_DEVICE_SOUND:
|
||||
case FILE_DEVICE_MODEM:
|
||||
return FILE_TYPE_CHAR;
|
||||
|
||||
case FILE_DEVICE_NAMED_PIPE:
|
||||
return FILE_TYPE_PIPE;
|
||||
}
|
||||
|
||||
return FILE_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
|
@ -267,19 +332,29 @@ DWORD STDCALL GetFileSize(HANDLE hFile,
|
|||
DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
||||
LPDWORD lpFileSizeHigh)
|
||||
{
|
||||
WCHAR FileNameW[MAX_PATH];
|
||||
ULONG i;
|
||||
UNICODE_STRING FileNameU;
|
||||
ANSI_STRING FileName;
|
||||
DWORD Size;
|
||||
|
||||
i = 0;
|
||||
while ((*lpFileName)!=0 && i < MAX_PATH)
|
||||
{
|
||||
FileNameW[i] = *lpFileName;
|
||||
lpFileName++;
|
||||
i++;
|
||||
}
|
||||
FileNameW[i] = 0;
|
||||
RtlInitAnsiString(&FileName,
|
||||
(LPSTR)lpFileName);
|
||||
|
||||
return GetCompressedFileSizeW(FileNameW,lpFileSizeHigh);
|
||||
/* convert ansi (or oem) string to unicode */
|
||||
if (bIsFileApiAnsi)
|
||||
RtlAnsiStringToUnicodeString(&FileNameU,
|
||||
&FileName,
|
||||
TRUE);
|
||||
else
|
||||
RtlOemStringToUnicodeString(&FileNameU,
|
||||
&FileName,
|
||||
TRUE);
|
||||
|
||||
Size = GetCompressedFileSizeW(FileNameU.Buffer,
|
||||
lpFileSizeHigh);
|
||||
|
||||
RtlFreeUnicodeString (&FileNameU);
|
||||
|
||||
return Size;
|
||||
}
|
||||
|
||||
|
||||
|
@ -412,9 +487,7 @@ GetFileAttributesA (
|
|||
|
||||
Result = GetFileAttributesW (FileNameU.Buffer);
|
||||
|
||||
RtlFreeHeap (RtlGetProcessHeap (),
|
||||
0,
|
||||
FileNameU.Buffer);
|
||||
RtlFreeUnicodeString (&FileNameU);
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
@ -482,9 +555,7 @@ SetFileAttributesA (
|
|||
Result = SetFileAttributesW (FileNameU.Buffer,
|
||||
dwFileAttributes);
|
||||
|
||||
RtlFreeHeap (RtlGetProcessHeap (),
|
||||
0,
|
||||
FileNameU.Buffer);
|
||||
RtlFreeUnicodeString (&FileNameU);
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue