source: trunk/src/kernel32/hmdisk.cpp@ 4256

Last change on this file since 4256 was 4256, checked in by sandervl, 25 years ago

heap corruption fix (initcommandline) + handlemanager class for disks

File size: 5.0 KB
Line 
1/* $Id: hmdisk.cpp,v 1.1 2000-09-13 21:10:58 sandervl Exp $ */
2
3/*
4 * Win32 Disk API functions for OS/2
5 *
6 * Copyright 2000 Sander van Leeuwen
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#define INCL_DOSPROFILE
13#define INCL_DOSDEVICES
14#define INCL_DOSDEVIOCTL
15#define INCL_GPI
16#define INCL_DOSFILEMGR /* File Manager values */
17#define INCL_DOSERRORS /* DOS Error values */
18#define INCL_DOSPROCESS /* DOS Process values */
19#define INCL_DOSMISC /* DOS Miscellanous values */
20#include <os2wrap.h> //Odin32 OS/2 api wrappers
21#include <string.h>
22
23#include <win32type.h>
24#include <win32api.h>
25#include <misc.h>
26#include "hmdisk.h"
27#include "oslibdos.h"
28#include <win\winioctl.h>
29#include <win\ntddscsi.h>
30
31#define DBG_LOCALLOG DBG_hmdisk
32#include "dbglocal.h"
33
34//******************************************************************************
35//TODO: PHYSICALDRIVEn!!
36//******************************************************************************
37DWORD HMDeviceDiskClass::CreateFile (LPCSTR lpFileName,
38 PHMHANDLEDATA pHMHandleData,
39 PVOID lpSecurityAttributes,
40 PHMHANDLEDATA pHMHandleDataTemplate)
41{
42 HFILE hFile;
43 HFILE hTemplate;
44
45 dprintf2(("KERNEL32: HMDeviceDiskClass::CreateFile %s(%s,%08x,%08x,%08x)\n",
46 lpHMDeviceName,
47 lpFileName,
48 pHMHandleData,
49 lpSecurityAttributes,
50 pHMHandleDataTemplate));
51
52 if(strncmp(lpFileName, // "support" for local unc names
53 "\\\\.\\",
54 4) == 0)
55 {
56 lpFileName+=4;
57 }
58
59 hFile = OSLibDosCreateFile((LPSTR)lpFileName,
60 pHMHandleData->dwAccess,
61 pHMHandleData->dwShare,
62 (LPSECURITY_ATTRIBUTES)lpSecurityAttributes,
63 pHMHandleData->dwCreation,
64 pHMHandleData->dwFlags,
65 hTemplate);
66
67 if (hFile != INVALID_HANDLE_ERROR)
68 {
69 pHMHandleData->hHMHandle = hFile;
70 return (NO_ERROR);
71 }
72 else {
73 dprintf(("CreateFile failed; error %d", GetLastError()));
74 return(GetLastError());
75 }
76}
77//******************************************************************************
78//******************************************************************************
79DWORD HMDeviceDiskClass::CloseHandle(PHMHANDLEDATA pHMHandleData)
80{
81 return OSLibDosClose(pHMHandleData->hHMHandle);
82}
83//******************************************************************************
84//******************************************************************************
85BOOL HMDeviceDiskClass::DeviceIoControl(PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
86 LPVOID lpInBuffer, DWORD nInBufferSize,
87 LPVOID lpOutBuffer, DWORD nOutBufferSize,
88 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
89{
90 switch(dwIoControlCode)
91 {
92 case FSCTL_DELETE_REPARSE_POINT:
93 case FSCTL_DISMOUNT_VOLUME:
94 case FSCTL_GET_COMPRESSION:
95 case FSCTL_GET_REPARSE_POINT:
96 case FSCTL_LOCK_VOLUME:
97 case FSCTL_QUERY_ALLOCATED_RANGES:
98 case FSCTL_SET_COMPRESSION:
99 case FSCTL_SET_REPARSE_POINT:
100 case FSCTL_SET_SPARSE:
101 case FSCTL_SET_ZERO_DATA:
102 case FSCTL_UNLOCK_VOLUME:
103 case IOCTL_DISK_CHECK_VERIFY:
104 case IOCTL_DISK_EJECT_MEDIA:
105 case IOCTL_DISK_FORMAT_TRACKS:
106 case IOCTL_DISK_GET_DRIVE_GEOMETRY:
107 case IOCTL_DISK_GET_DRIVE_LAYOUT:
108 case IOCTL_DISK_GET_MEDIA_TYPES:
109 case IOCTL_DISK_GET_PARTITION_INFO:
110 case IOCTL_DISK_LOAD_MEDIA:
111 case IOCTL_DISK_MEDIA_REMOVAL:
112 case IOCTL_DISK_PERFORMANCE:
113 case IOCTL_DISK_REASSIGN_BLOCKS:
114 case IOCTL_DISK_SET_DRIVE_LAYOUT:
115 case IOCTL_DISK_SET_PARTITION_INFO:
116 case IOCTL_DISK_VERIFY:
117 case IOCTL_SERIAL_LSRMST_INSERT:
118 case IOCTL_STORAGE_CHECK_VERIFY:
119 case IOCTL_STORAGE_EJECT_MEDIA:
120 case IOCTL_STORAGE_GET_MEDIA_TYPES:
121 case IOCTL_STORAGE_LOAD_MEDIA:
122 case IOCTL_STORAGE_MEDIA_REMOVAL:
123 break;
124 case IOCTL_SCSI_PASS_THROUGH:
125 case IOCTL_SCSI_MINIPORT:
126 case IOCTL_SCSI_GET_INQUIRY_DATA:
127 case IOCTL_SCSI_GET_CAPABILITIES:
128 case IOCTL_SCSI_PASS_THROUGH_DIRECT:
129 break;
130
131 case IOCTL_SCSI_GET_ADDRESS:
132 {
133 if(!lpOutBuffer || nOutBufferSize < 8) {
134 SetLastError(ERROR_INSUFFICIENT_BUFFER_W); //todo: right error?
135 return(FALSE);
136 }
137 SCSI_ADDRESS *addr = (SCSI_ADDRESS *)lpOutBuffer;
138 addr->Length = sizeof(SCSI_ADDRESS);
139 addr->PortNumber = 0;
140 addr->PathId = 0;
141 addr->TargetId = 1;
142 addr->Lun = 3;
143 return TRUE;
144 }
145 case IOCTL_SCSI_RESCAN_BUS:
146 case IOCTL_SCSI_GET_DUMP_POINTERS:
147 case IOCTL_SCSI_FREE_DUMP_POINTERS:
148 case IOCTL_IDE_PASS_THROUGH:
149 break;
150
151 }
152 dprintf(("HMDeviceDiskClass::DeviceIoControl: unimplemented dwIoControlCode=%08lx\n", dwIoControlCode));
153 SetLastError( ERROR_CALL_NOT_IMPLEMENTED_W );
154 return FALSE;
155}
156//******************************************************************************
157//******************************************************************************
Note: See TracBrowser for help on using the repository browser.