Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencdrom.h
Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (C) Microsoft Corporation, 1991 - 1999 00004 00005 Module Name: 00006 00007 cdromp.h 00008 00009 Abstract: 00010 00011 Private header file for cdrom.sys. This contains private 00012 structure and function declarations as well as constant 00013 values which do not need to be exported. 00014 00015 Author: 00016 00017 Environment: 00018 00019 kernel mode only 00020 00021 Notes: 00022 00023 00024 Revision History: 00025 00026 --*/ 00027 00028 #ifndef __CDROMP_H__ 00029 #define __CDROMP_H__ 00030 00031 #include "ntddmmc.h" 00032 #include "trace.h" 00033 00034 extern CLASSPNP_SCAN_FOR_SPECIAL_INFO CdromHackItems[]; 00035 00036 typedef enum { 00037 CdromDebugError = 0, // always printed 00038 CdromDebugWarning = 1, // set bit 0x00000001 in nt!kd_cdrom_mask 00039 CdromDebugTrace = 2, // set bit 0x00000002 in nt!kd_cdrom_mask 00040 CdromDebugInfo = 3, // set bit 0x00000004 in nt!kd_cdrom_mask 00041 #if 0 00042 CdromDebug = z, // set bit 0x00000000 in nt!kd_cdrom_mask 00043 CdromDebug = z, // set bit 0x00000000 in nt!kd_cdrom_mask 00044 CdromDebug = z, // set bit 0x00000000 in nt!kd_cdrom_mask 00045 CdromDebug = z, // set bit 0x00000000 in nt!kd_cdrom_mask 00046 #endif 00047 CdromDebugFeatures = 32 // set bit 0x80000000 in nt!kd_cdrom_mask 00048 }CdromError; 00049 00050 #define CDROM_GET_CONFIGURATION_TIMEOUT (0x4) 00051 00052 #define CDROM_HACK_DEC_RRD (0x00000001) 00053 #define CDROM_HACK_FUJITSU_FMCD_10x (0x00000002) 00054 #define CDROM_HACK_HITACHI_1750 (0x00000004) 00055 #define CDROM_HACK_HITACHI_GD_2000 (0x00000008) 00056 #define CDROM_HACK_TOSHIBA_SD_W1101 (0x00000010) 00057 #define CDROM_HACK_TOSHIBA_XM_3xx (0x00000020) 00058 #define CDROM_HACK_NEC_CDDA (0x00000040) 00059 #define CDROM_HACK_PLEXTOR_CDDA (0x00000080) 00060 #define CDROM_HACK_BAD_GET_CONFIG_SUPPORT (0x00000100) 00061 #define CDROM_HACK_FORCE_READ_CD_DETECTION (0x00000200) 00062 #define CDROM_HACK_READ_CD_SUPPORTED (0x00000400) 00063 #define CDROM_HACK_LOCKED_PAGES (0x80000000) // not a valid flag to save 00064 00065 #define CDROM_HACK_VALID_FLAGS (0x000007ff) 00066 #define CDROM_HACK_INVALID_FLAGS (~CDROM_HACK_VALID_FLAGS) 00067 00068 00069 typedef struct _XA_CONTEXT { 00070 00071 // 00072 // Pointer to the device object. 00073 // 00074 00075 PDEVICE_OBJECT DeviceObject; 00076 00077 // 00078 // Pointer to the original request when 00079 // a mode select must be sent. 00080 // 00081 00082 PIRP OriginalRequest; 00083 00084 // 00085 // Pointer to the mode select srb. 00086 // 00087 00088 PSCSI_REQUEST_BLOCK Srb; 00089 } XA_CONTEXT, *PXA_CONTEXT; 00090 00091 typedef struct _ERROR_RECOVERY_DATA { 00092 MODE_PARAMETER_HEADER Header; 00093 MODE_PARAMETER_BLOCK BlockDescriptor; 00094 MODE_READ_RECOVERY_PAGE ReadRecoveryPage; 00095 } ERROR_RECOVERY_DATA, *PERROR_RECOVERY_DATA; 00096 00097 typedef struct _ERROR_RECOVERY_DATA10 { 00098 MODE_PARAMETER_HEADER10 Header10; 00099 MODE_PARAMETER_BLOCK BlockDescriptor10; 00100 MODE_READ_RECOVERY_PAGE ReadRecoveryPage10; 00101 } ERROR_RECOVERY_DATA10, *PERROR_RECOVERY_DATA10; 00102 00103 // 00104 // CdRom specific addition to device extension. 00105 // 00106 00107 typedef struct _CDROM_DRIVER_EXTENSION { 00108 ULONG InterlockedCdRomCounter; 00109 PVOID Reserved[3]; 00110 } CDROM_DRIVER_EXTENSION, *PCDROM_DRIVER_EXTENSION; 00111 00112 #define CdromMmcUpdateComplete 0 00113 #define CdromMmcUpdateRequired 1 00114 #define CdromMmcUpdateStarted 2 00115 00116 typedef struct _CDROM_MMC_EXTENSION { 00117 00118 ULONG IsMmc; // allow quick checks 00119 ULONG WriteAllowed; 00120 00121 LONG UpdateState; 00122 00123 SLIST_HEADER DelayedIrps; // irps delayed due to 00124 KSPIN_LOCK DelayedLock; // lock for delayed irps 00125 00126 PIO_WORKITEM CapabilitiesWorkItem; 00127 PIRP CapabilitiesIrp; 00128 PMDL CapabilitiesMdl; 00129 PGET_CONFIGURATION_HEADER CapabilitiesBuffer; 00130 ULONG CapabilitiesBufferSize; 00131 KEVENT CapabilitiesEvent; 00132 SCSI_REQUEST_BLOCK CapabilitiesSrb; 00133 00134 } CDROM_MMC_EXTENSION, *PCDROM_MMC_EXTENSION; 00135 00136 00137 #define CDROM_DRIVER_EXTENSION_ID CdRomAddDevice 00138 00139 typedef struct _CDROM_DATA { 00140 00141 // 00142 // Pointer to the cdrom driver extension 00143 // 00144 00145 PCDROM_DRIVER_EXTENSION DriverExtension; 00146 00147 00148 // 00149 // These bits allow detection of when to requery the 00150 // drive's capabilities. 00151 // 00152 00153 CDROM_MMC_EXTENSION Mmc; 00154 00155 // 00156 // hack flags for ScanForSpecial routines 00157 // 00158 00159 ULONG_PTR HackFlags; 00160 00161 // 00162 // the error handling routines need to be per-device, 00163 // not per-driver.... 00164 // 00165 00166 PCLASS_ERROR ErrorHandler; 00167 00168 // 00169 // Indicates whether an audio play operation 00170 // is currently being performed. 00171 // Only thing this does is prevent reads and 00172 // toc requests while playing audio. 00173 // 00174 00175 BOOLEAN PlayActive; 00176 00177 // 00178 // Indicates whether the blocksize used for user data 00179 // is 2048 or 2352. 00180 // 00181 00182 BOOLEAN RawAccess; 00183 00184 // 00185 // Indicates that this is a DEC RRD cdrom. 00186 // This drive requires software to fix responses 00187 // from the faulty firmware 00188 // 00189 00190 BOOLEAN IsDecRrd; 00191 00192 // 00193 // This points to an irp which needs to be delayed for a bit before a 00194 // retry can be attempted. The interval counter is set by the deferring 00195 // routine and will be decremented to zero in the tick handler. Once 00196 // the counter goes to zero the irp will be issued again. 00197 // DelayedRetryResend controls whether the irp is resent to the lower 00198 // driver (TRUE) or reissued into the startio routine (FALSE) 00199 // 00200 00201 BOOLEAN DelayedRetryResend; 00202 00203 PIRP DelayedRetryIrp; 00204 00205 ULONG DelayedRetryInterval; 00206 00207 KSPIN_LOCK DelayedRetrySpinLock; 00208 00209 // 00210 // indicate we need to pick a default dvd region 00211 // for the user if we can 00212 // 00213 00214 ULONG PickDvdRegion; 00215 00216 // 00217 // The interface strings registered for this device. 00218 // 00219 00220 UNICODE_STRING CdromInterfaceString; 00221 UNICODE_STRING VolumeInterfaceString; 00222 00223 // 00224 // The well known name link for this device. 00225 // 00226 00227 UNICODE_STRING WellKnownName; 00228 00229 // 00230 // Indicates whether 6 or 10 bytes mode sense/select 00231 // should be used 00232 // 00233 00234 ULONG XAFlags; 00235 00236 // 00237 // keep track of what type of DVD device we are 00238 // 00239 00240 BOOLEAN DvdRpc0Device; 00241 BOOLEAN DvdRpc0LicenseFailure; 00242 UCHAR Rpc0SystemRegion; // bitmask, one means prevent play 00243 UCHAR Rpc0SystemRegionResetCount; 00244 00245 ULONG Rpc0RetryRegistryCallback; // one until initial region choosen 00246 00247 KMUTEX Rpc0RegionMutex; 00248 00249 // 00250 // Storage for the error recovery page. This is used 00251 // as an easy method to switch block sizes. 00252 // 00253 // NOTE - doubly unnamed structs just aren't very clean looking code - this 00254 // should get cleaned up at some point in the future. 00255 // 00256 00257 union { 00258 ERROR_RECOVERY_DATA; 00259 ERROR_RECOVERY_DATA10; 00260 }; 00261 00262 } CDROM_DATA, *PCDROM_DATA; 00263 00264 #define DEVICE_EXTENSION_SIZE sizeof(FUNCTIONAL_DEVICE_EXTENSION) + sizeof(CDROM_DATA) 00265 #define SCSI_CDROM_TIMEOUT 10 00266 #define SCSI_CHANGER_BONUS_TIMEOUT 10 00267 #define HITACHI_MODE_DATA_SIZE 12 00268 #define MODE_DATA_SIZE 64 00269 #define RAW_SECTOR_SIZE 2352 00270 #define COOKED_SECTOR_SIZE 2048 00271 #define CDROM_SRB_LIST_SIZE 4 00272 00273 #define PLAY_ACTIVE(x) (((PCDROM_DATA)(x->CommonExtension.DriverData))->PlayActive) 00274 00275 #define MSF_TO_LBA(Minutes,Seconds,Frames) \ 00276 (ULONG)((60 * 75 * (Minutes)) + (75 * (Seconds)) + ((Frames) - 150)) 00277 00278 #define LBA_TO_MSF(Lba,Minutes,Seconds,Frames) \ 00279 { \ 00280 (Minutes) = (UCHAR)(Lba / (60 * 75)); \ 00281 (Seconds) = (UCHAR)((Lba % (60 * 75)) / 75); \ 00282 (Frames) = (UCHAR)((Lba % (60 * 75)) % 75); \ 00283 } 00284 00285 #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10)) 00286 00287 // 00288 // Define flags for XA, CDDA, and Mode Select/Sense 00289 // 00290 00291 #define XA_USE_6_BYTE 0x01 00292 #define XA_USE_10_BYTE 0x02 00293 00294 #define XA_NOT_SUPPORTED 0x10 00295 #define XA_USE_READ_CD 0x20 00296 #define XA_PLEXTOR_CDDA 0x40 00297 #define XA_NEC_CDDA 0x80 00298 00299 // 00300 // Sector types for READ_CD 00301 // 00302 00303 #define ANY_SECTOR 0 00304 #define CD_DA_SECTOR 1 00305 #define YELLOW_MODE1_SECTOR 2 00306 #define YELLOW_MODE2_SECTOR 3 00307 #define FORM2_MODE1_SECTOR 4 00308 #define FORM2_MODE2_SECTOR 5 00309 00310 #define MAX_COPY_PROTECT_AGID 4 00311 00312 #ifdef ExAllocatePool 00313 #undef ExAllocatePool 00314 #define ExAllocatePool #assert(FALSE) 00315 #endif 00316 00317 #define CDROM_TAG_GET_CONFIG 'cCcS' // "ScCc" - ioctl GET_CONFIGURATION 00318 #define CDROM_TAG_DC_EVENT 'ECcS' // "ScCE" - device control synch event 00319 #define CDROM_TAG_FEATURE 'FCcS' // "ScCF" - allocated by CdRomGetConfiguration(), free'd by caller 00320 #define CDROM_TAG_DISK_GEOM 'GCcS' // "ScCG" - disk geometry buffer 00321 #define CDROM_TAG_HITACHI_ERROR 'HCcS' // "ScCH" - hitachi error buffer 00322 #define CDROM_TAG_SENSE_INFO 'ICcS' // "ScCI" - sense info buffers 00323 #define CDROM_TAG_POWER_IRP 'iCcS' // "ScCi" - irp for power request 00324 #define CDROM_TAG_SRB 'SCcS' // "ScCS" - srb allocation 00325 #define CDROM_TAG_STRINGS 'sCcS' // "ScCs" - assorted string data 00326 #define CDROM_TAG_MODE_DATA 'MCcS' // "ScCM" - mode data buffer 00327 #define CDROM_TAG_READ_CAP 'PCcS' // "ScCP" - read capacity buffer 00328 #define CDROM_TAG_PLAY_ACTIVE 'pCcS' // "ScCp" - play active checks 00329 #define CDROM_TAG_SUB_Q 'QCcS' // "ScCQ" - read sub q buffer 00330 #define CDROM_TAG_RAW 'RCcS' // "ScCR" - raw mode read buffer 00331 #define CDROM_TAG_TOC 'TCcS' // "ScCT" - read toc buffer 00332 #define CDROM_TAG_TOSHIBA_ERROR 'tCcS' // "ScCt" - toshiba error buffer 00333 #define CDROM_TAG_DEC_ERROR 'dCcS' // "ScCt" - DEC error buffer 00334 #define CDROM_TAG_UPDATE_CAP 'UCcS' // "ScCU" - update capacity path 00335 #define CDROM_TAG_VOLUME 'VCcS' // "ScCV" - volume control buffer 00336 #define CDROM_TAG_VOLUME_INT 'vCcS' // "ScCv" - volume control buffer 00337 00338 #define DVD_TAG_READ_STRUCTURE 'SVcS' // "ScVS" - used for dvd structure reads 00339 #define DVD_TAG_READ_KEY 'kVcS' // "ScVk" - read buffer for dvd key 00340 #define DVD_TAG_SEND_KEY 'KVcS' // "ScVK" - write buffer for dvd key 00341 #define DVD_TAG_RPC2_CHECK 'sVcS' // "ScVs" - read buffer for dvd/rpc2 check 00342 #define DVD_TAG_DVD_REGION 'tVcS' // "ScVt" - read buffer for rpc2 check 00343 #define DVD_TAG_SECURITY 'XVcS' // "ScVX" - security descriptor 00344 00345 00346 #define CDROM_SUBKEY_NAME (L"CdRom") // store new settings here 00347 #define CDROM_READ_CD_NAME (L"ReadCD") // READ_CD support previously detected 00348 #define CDROM_NON_MMC_DRIVE_NAME (L"NonMmc") // MMC commands hang 00349 // 00350 // DVD Registry Value Names for RPC0 Device 00351 // 00352 #define DVD_DEFAULT_REGION (L"DefaultDvdRegion") // this is init. by the dvd class installer 00353 #define DVD_CURRENT_REGION (L"DvdR") 00354 #define DVD_REGION_RESET_COUNT (L"DvdRCnt") 00355 #define DVD_MAX_REGION_RESET_COUNT 2 00356 #define DVD_MAX_REGION 8 00357 00358 00359 00360 #define BAIL_OUT(Irp) \ 00361 DebugPrint((2, "Cdrom: [%p] Bailing with status " \ 00362 " %lx at line %x file %s\n", \ 00363 (Irp), (Irp)->IoStatus.Status, \ 00364 __LINE__, __FILE__)) 00365 00366 00367 /*++ 00368 00369 Routine Description: 00370 00371 This routine grabs an extra remove lock using a local variable 00372 for a unique tag. It then completes the irp in question, and 00373 the just-acquired removelock guarantees that it is still safe 00374 to call IoStartNextPacket(). When that finishes, we release 00375 the newly acquired RemoveLock and return. 00376 00377 Arguments: 00378 00379 DeviceObject - the device object for the StartIo queue 00380 Irp - the request we are completing 00381 00382 Return Value: 00383 00384 None 00385 00386 Notes: 00387 00388 This is implemented as an inline function to allow the compiler 00389 to optimize this as either a function call or as actual inline code. 00390 00391 This routine will not work with IoXxxRemoveLock() calls, as the 00392 behavior is different. ClassXxxRemoveLock() calls succeed until 00393 the remove has completed, while IoXxxRemoveLock() calls fail as 00394 soon as the call to IoReleaseRemoveLockAndWait() has been called. 00395 The Class version allows this routine to work in a safe manner. 00396 00397 replaces the following two lines: 00398 IoStartNextPacket(DeviceObject, FALSE); 00399 ClassReleaseRemoveLock(DeviceObject, Irp); 00400 and raises irql as needed to call IoStartNextPacket() 00401 00402 --*/ 00403 static inline 00404 VOID 00405 CdRomCompleteIrpAndStartNextPacketSafely( 00406 IN PDEVICE_OBJECT DeviceObject, 00407 IN PIRP Irp 00408 ) 00409 { 00410 UCHAR uniqueAddress; 00411 KIRQL oldIrql = KeGetCurrentIrql(); 00412 00413 ClassAcquireRemoveLock(DeviceObject, (PIRP)&uniqueAddress); 00414 ClassReleaseRemoveLock(DeviceObject, Irp); 00415 ClassCompleteRequest(DeviceObject, Irp, IO_CD_ROM_INCREMENT); 00416 00417 if (oldIrql > DISPATCH_LEVEL) { 00418 ASSERT(!"Cannot call IoStartNextPacket at raised IRQL!"); 00419 } else if (oldIrql < DISPATCH_LEVEL) { 00420 KeRaiseIrqlToDpcLevel(); 00421 } else { // (oldIrql == DISPATCH_LEVEL) 00422 NOTHING; 00423 } 00424 00425 IoStartNextPacket(DeviceObject, FALSE); 00426 00427 if (oldIrql > DISPATCH_LEVEL) { 00428 ASSERT(!"Cannot call IoStartNextPacket at raised IRQL!"); 00429 } else if (oldIrql < DISPATCH_LEVEL) { 00430 KeLowerIrql(oldIrql); 00431 } else { // (oldIrql == DISPATCH_LEVEL) 00432 NOTHING; 00433 } 00434 00435 ClassReleaseRemoveLock(DeviceObject, (PIRP)&uniqueAddress); 00436 00437 00438 return; 00439 } 00440 00441 VOID 00442 CdRomDeviceControlDvdReadStructure( 00443 IN PDEVICE_OBJECT DeviceObject, 00444 IN PIRP OriginalIrp, 00445 IN PIRP NewIrp, 00446 IN PSCSI_REQUEST_BLOCK Srb 00447 ); 00448 00449 VOID 00450 CdRomDeviceControlDvdEndSession( 00451 IN PDEVICE_OBJECT DeviceObject, 00452 IN PIRP OriginalIrp, 00453 IN PIRP NewIrp, 00454 IN PSCSI_REQUEST_BLOCK Srb 00455 ); 00456 00457 VOID 00458 CdRomDeviceControlDvdStartSessionReadKey( 00459 IN PDEVICE_OBJECT DeviceObject, 00460 IN PIRP OriginalIrp, 00461 IN PIRP NewIrp, 00462 IN PSCSI_REQUEST_BLOCK Srb 00463 ); 00464 00465 VOID 00466 CdRomDeviceControlDvdSendKey( 00467 IN PDEVICE_OBJECT DeviceObject, 00468 IN PIRP OriginalIrp, 00469 IN PIRP NewIrp, 00470 IN PSCSI_REQUEST_BLOCK Srb 00471 ); 00472 00473 00474 00475 NTSTATUS 00476 DriverEntry( 00477 IN PDRIVER_OBJECT DriverObject, 00478 IN PUNICODE_STRING RegistryPath 00479 ); 00480 00481 VOID 00482 CdRomUnload( 00483 IN PDRIVER_OBJECT DriverObject 00484 ); 00485 00486 NTSTATUS 00487 CdRomAddDevice( 00488 IN PDRIVER_OBJECT DriverObject, 00489 IN PDEVICE_OBJECT Pdo 00490 ); 00491 00492 NTSTATUS 00493 CdRomOpenClose( 00494 IN PDEVICE_OBJECT DeviceObject, 00495 IN PIRP Irp 00496 ); 00497 00498 NTSTATUS 00499 CdRomReadWriteVerification( 00500 IN PDEVICE_OBJECT DeviceObject, 00501 IN PIRP Irp 00502 ); 00503 00504 NTSTATUS 00505 CdRomSwitchMode( 00506 IN PDEVICE_OBJECT DeviceObject, 00507 IN ULONG SectorSize, 00508 IN PIRP OriginalRequest 00509 ); 00510 00511 NTSTATUS 00512 CdRomDeviceControlDispatch( 00513 IN PDEVICE_OBJECT DeviceObject, 00514 IN PIRP Irp 00515 ); 00516 00517 NTSTATUS 00518 CdRomDeviceControlCompletion( 00519 IN PDEVICE_OBJECT DeviceObject, 00520 IN PIRP Irp, 00521 IN PVOID Context 00522 ); 00523 00524 NTSTATUS 00525 CdRomSetVolumeIntermediateCompletion( 00526 IN PDEVICE_OBJECT DeviceObject, 00527 IN PIRP Irp, 00528 IN PVOID Context 00529 ); 00530 00531 NTSTATUS 00532 CdRomSwitchModeCompletion( 00533 IN PDEVICE_OBJECT DeviceObject, 00534 IN PIRP Irp, 00535 IN PVOID Context 00536 ); 00537 00538 NTSTATUS 00539 CdRomXACompletion( 00540 IN PDEVICE_OBJECT DeviceObject, 00541 IN PIRP Irp, 00542 IN PVOID Context 00543 ); 00544 00545 NTSTATUS 00546 CdRomClassIoctlCompletion( 00547 IN PDEVICE_OBJECT DeviceObject, 00548 IN PIRP Irp, 00549 IN PVOID Context 00550 ); 00551 00552 VOID 00553 CdRomStartIo( 00554 IN PDEVICE_OBJECT DeviceObject, 00555 IN PIRP Irp 00556 ); 00557 00558 VOID 00559 CdRomTickHandler( 00560 IN PDEVICE_OBJECT DeviceObject 00561 ); 00562 00563 NTSTATUS 00564 CdRomUpdateCapacity( 00565 IN PFUNCTIONAL_DEVICE_EXTENSION DeviceExtension, 00566 IN PIRP IrpToComplete, 00567 IN OPTIONAL PKEVENT IoctlEvent 00568 ); 00569 00570 NTSTATUS 00571 CdRomCreateDeviceObject( 00572 IN PDRIVER_OBJECT DriverObject, 00573 IN PDEVICE_OBJECT Pdo 00574 ); 00575 00576 VOID 00577 ScanForSpecialHandler( 00578 PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, 00579 ULONG_PTR HackFlags 00580 ); 00581 00582 VOID 00583 ScanForSpecial( 00584 PDEVICE_OBJECT DeviceObject 00585 ); 00586 00587 BOOLEAN 00588 CdRomIsPlayActive( 00589 IN PDEVICE_OBJECT DeviceObject 00590 ); 00591 00592 VOID 00593 CdRomErrorHandler( 00594 PDEVICE_OBJECT DeviceObject, 00595 PSCSI_REQUEST_BLOCK Srb, 00596 NTSTATUS *Status, 00597 BOOLEAN *Retry 00598 ); 00599 00600 VOID 00601 HitachiProcessErrorGD2000( 00602 PDEVICE_OBJECT DeviceObject, 00603 PSCSI_REQUEST_BLOCK Srb, 00604 NTSTATUS *Status, 00605 BOOLEAN *Retry 00606 ); 00607 00608 VOID 00609 HitachiProcessError( 00610 PDEVICE_OBJECT DeviceObject, 00611 PSCSI_REQUEST_BLOCK Srb, 00612 NTSTATUS *Status, 00613 BOOLEAN *Retry 00614 ); 00615 00616 VOID 00617 ToshibaProcessError( 00618 PDEVICE_OBJECT DeviceObject, 00619 PSCSI_REQUEST_BLOCK Srb, 00620 NTSTATUS *Status, 00621 BOOLEAN *Retry 00622 ); 00623 00624 NTSTATUS 00625 ToshibaProcessErrorCompletion( 00626 PDEVICE_OBJECT DeviceObject, 00627 PIRP Irp, 00628 PVOID Context 00629 ); 00630 00631 VOID 00632 CdRomCreateNamedEvent( 00633 IN PFUNCTIONAL_DEVICE_EXTENSION DeviceExtension, 00634 IN ULONG DeviceNumber 00635 ); 00636 00637 NTSTATUS 00638 CdRomInitDevice( 00639 IN PDEVICE_OBJECT Fdo 00640 ); 00641 00642 NTSTATUS 00643 CdRomStartDevice( 00644 IN PDEVICE_OBJECT Fdo 00645 ); 00646 00647 NTSTATUS 00648 CdRomStopDevice( 00649 IN PDEVICE_OBJECT DeviceObject, 00650 IN UCHAR Type 00651 ); 00652 00653 NTSTATUS 00654 CdRomRemoveDevice( 00655 IN PDEVICE_OBJECT DeviceObject, 00656 IN UCHAR Type 00657 ); 00658 00659 NTSTATUS 00660 CdRomDvdEndAllSessionsCompletion( 00661 IN PDEVICE_OBJECT DeviceObject, 00662 IN PIRP Irp, 00663 IN PVOID Context 00664 ); 00665 00666 NTSTATUS 00667 CdRomDvdReadDiskKeyCompletion( 00668 IN PDEVICE_OBJECT DeviceObject, 00669 IN PIRP Irp, 00670 IN PVOID Context 00671 ); 00672 00673 DEVICE_TYPE 00674 CdRomGetDeviceType( 00675 IN PDEVICE_OBJECT DeviceObject 00676 ); 00677 00678 NTSTATUS 00679 CdRomCreateWellKnownName( 00680 IN PDEVICE_OBJECT DeviceObject 00681 ); 00682 00683 VOID 00684 CdRomDeleteWellKnownName( 00685 IN PDEVICE_OBJECT DeviceObject 00686 ); 00687 00688 NTSTATUS 00689 CdRomGetDeviceParameter ( 00690 IN PDEVICE_OBJECT DeviceObject, 00691 IN PWSTR ParameterName, 00692 IN OUT PULONG ParameterValue 00693 ); 00694 00695 NTSTATUS 00696 CdRomSetDeviceParameter ( 00697 IN PDEVICE_OBJECT DeviceObject, 00698 IN PWSTR ParameterName, 00699 IN ULONG ParameterValue 00700 ); 00701 00702 VOID 00703 CdRomPickDvdRegion ( 00704 IN PDEVICE_OBJECT Fdo 00705 ); 00706 00707 NTSTATUS 00708 CdRomRetryRequest( 00709 IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, 00710 IN PIRP Irp, 00711 IN ULONG Delay, 00712 IN BOOLEAN ResendIrp 00713 ); 00714 00715 NTSTATUS 00716 CdRomRerunRequest( 00717 IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, 00718 IN OPTIONAL PIRP Irp, 00719 IN BOOLEAN ResendIrp 00720 ); 00721 00722 NTSTATUS 00723 CdRomGetRpc0Settings( 00724 IN PDEVICE_OBJECT Fdo 00725 ); 00726 00727 NTSTATUS 00728 CdRomSetRpc0Settings( 00729 IN PDEVICE_OBJECT Fdo, 00730 IN UCHAR NewRegion 00731 ); 00732 00733 NTSTATUS 00734 CdRomShutdownFlush( 00735 IN PDEVICE_OBJECT DeviceObject, 00736 IN PIRP Irp 00737 ); 00738 00740 00741 VOID 00742 CdRomIsDeviceMmcDevice( 00743 IN PDEVICE_OBJECT Fdo, 00744 OUT PBOOLEAN IsMmc 00745 ); 00746 00747 VOID 00748 NTAPI 00749 CdRomMmcErrorHandler( 00750 IN PDEVICE_OBJECT Fdo, 00751 IN PSCSI_REQUEST_BLOCK Srb, 00752 OUT PNTSTATUS Status, 00753 OUT PBOOLEAN Retry 00754 ); 00755 00756 PVOID 00757 CdRomFindFeaturePage( 00758 IN PGET_CONFIGURATION_HEADER FeatureBuffer, 00759 IN ULONG Length, 00760 IN FEATURE_NUMBER Feature 00761 ); 00762 00763 NTSTATUS 00764 CdRomGetConfiguration( 00765 IN PDEVICE_OBJECT Fdo, 00766 OUT PGET_CONFIGURATION_HEADER *Buffer, 00767 OUT PULONG BytesReturned, 00768 IN FEATURE_NUMBER StartingFeature, 00769 IN ULONG RequestedType 00770 ); 00771 00772 VOID 00773 CdRomUpdateMmcDriveCapabilities( 00774 IN PDEVICE_OBJECT Fdo, 00775 IN PVOID Context // RESERVED == NULL 00776 ); 00777 00778 VOID 00779 CdRomFindProfileInProfiles( 00780 IN PFEATURE_DATA_PROFILE_LIST ProfileHeader, 00781 IN FEATURE_PROFILE_TYPE ProfileToFind, 00782 OUT PBOOLEAN Exists 00783 ); 00784 00785 NTSTATUS 00786 CdRomAllocateMmcResources( 00787 IN PDEVICE_OBJECT Fdo 00788 ); 00789 00790 VOID 00791 CdRomDeAllocateMmcResources( 00792 IN PDEVICE_OBJECT Fdo 00793 ); 00794 00795 VOID 00796 CdromFakePartitionInfo( 00797 IN PCOMMON_DEVICE_EXTENSION CommonExtension, 00798 IN PIRP Irp 00799 ); 00800 00801 VOID 00802 CdRomInterpretReadCapacity( 00803 IN PDEVICE_OBJECT Fdo, 00804 IN PREAD_CAPACITY_DATA ReadCapacityBuffer 00805 ); 00806 00807 NTSTATUS 00808 CdRomShutdownFlushCompletion( 00809 IN PDEVICE_OBJECT DeviceObject, 00810 IN PIRP Irp, 00811 IN PIRP Context 00812 ); 00813 00814 VOID 00815 CdRompFlushDelayedList( 00816 IN PDEVICE_OBJECT Fdo, 00817 IN PCDROM_MMC_EXTENSION MmcData, 00818 IN NTSTATUS Status, 00819 IN BOOLEAN CalledFromWorkItem 00820 ); 00821 00822 #endif // __CDROMP_H__ 00823 00824 Generated on Sun May 27 2012 04:28:15 for ReactOS by
1.7.6.1
|