www.pudn.com > litth_virldisk.zip > onioctl.asm


.386p 
 
.xlist 
	include vmm.inc 
	include blockdev.inc 
	include cdioctl.inc	 
	include ior.inc 
	include iop.inc 
 
	include debug.inc 
;	include iodebug.inc     ; various IOS assertions (like AssertIOP) 
 
.list 
 
VXD_LOCKED_DATA_SEG 
 
	extrn	hFile:WORD 
 
VXD_LOCKED_DATA_ENDS 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
 
VXD_LOCKED_CODE_SEG 
 
public	OnCDRomIOCtl 
 
BeginProc	OnCDRomIOCtl , esp, sCall 
ArgVar	IOR_ptr,DWORD 
	 
	TRAP 
	EnterProc 
	 
	mov		eax, IOR_ptr 
	push		ebx 
	mov		ebx, eax 
	movzx		eax, [ebx]._ureq._IOR_ioctl_function 
	 
	cmp		eax, CD_IO_RESET_DRIVE 
	je		ResetDrive 
 
	cmp		eax, CD_IO_SEEK	 
	je		Seek 
 
	cmp		eax, CD_IO_GET_DEV_STATUS 
	je		GetDevStatus 
 
;	cmp		eax, CD_IO_QUERY_IOCTL_FUNC 
;	je		QueryIoctlFunc 
 
	cmp		eax, CD_IO_DISC_INFO 
	je		GetDiscInfo 
	 
	mov		[ebx]._ureq._IOR_ioctl_return, IORS_INVALID_COMMAND 
	xor		eax,eax 
	jmp		IO_invalid	 
	 
IO_Quit: 
	mov		[ebx].IOR_status, IORS_SUCCESS 
	jmp		IO_finish 
 
IO_invalid: 
	mov		[ebx].IOR_status, IORS_INVALID_COMMAND 
 
IO_finish: 
	pop		ebx 
	LeaveProc 
	return 
 
ResetDrive: 
 
	mov		[ebx]._ureq._IOR_ioctl_return, NO_ERROR 
	jmp		IO_Quit 
 
Seek: 
 
	mov		[ebx]._ureq._IOR_ioctl_return, NO_ERROR 
	jmp		IO_Quit 
 
GetDevStatus: 
 
	mov		[ebx]._ureq._IOR_ioctl_return, NO_ERROR 
	mov		eax, [ebx]._ureq._IOR_ioctl_buffer_ptr  
	mov		[eax].DeviceStatus, CDDEVSTAT_AUDIO_MANIPULATE 
	or		[eax].DeviceStatus, CDDEVSTAT_REDBOOK_TOO 
;	or		[eax].DeviceStatus, CDDEVSTAT_PLAY_AUDIO_TOO 
	or		[eax].DeviceStatus, CDDEVSTAT_NO_DISK_IN_DRIVE + CDDEVSTAT_CDXA 
	jmp		IO_Quit 
	 
GetDiscInfo: 
	test		hFile, 0 
;	jz		@F 
;@@: 
	mov		[ebx]._ureq._IOR_ioctl_return, IORS_NO_MEDIA 
	jmp		IO_Quit	 
 
QueryIoctlFunc: 
	jmp		IO_Quit 
		 
EndProc			OnCDRomIOCtl 
 
VXD_LOCKED_CODE_ENDS 
 
	end