Int 21 Fn 4403 - Smartdrv.sys V3.x Only - Ioctl - Cache Control [c]

AX = 4403h
BX = handle for device "SMARTAAR"
CX = number of bytes to write
DS:DX -> SMARTDRV control block (see #1210)

Return: CF clear if successful
AX = number of bytes actually written
0000h if control block too small for given command
CF set on error
AX = error code (01h,05h,06h,0Dh) (see #1366 at AH=59h/BX=0000h)

Note: NCache2 (from the Norton Utilities v8.0) attempts to support this
interface, but does not do so correctly, often hanging the system;
one should use the SmartDrive v4.x or NCache private interfaces
(see INT 2F/AX=4A10h/BX=0000h,INT 2F/AX=FE00h/DI=4E55h)

See Also: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h

(Table 1209)
Values for SMARTDRV function code:
00h flush cache
01h flush and discard cache
02h disable caching (flushes and discards cache first)
03h enable caching
04h control write caching
05h set flushing tick count
06h lock cache contents
07h unlock cache contents
08h set flush-on-reboot flag
09h unused
0Ah control full-track caching
0Bh reduce cache size
0Ch increase cache size
0Dh set INT 13 chain address

Format of SMARTDRV control block:
Offset Size Description (Table 1210)
00h BYTE function code (see #1209)
---functions 00h-03h,06h,07h---
no additional fields
---function 04h---
01h BYTE write caching control action
00h turn off write-through
01h turn on write-through
02h turn off write buffering (also flushes cache)
03h turn on write buffering (also flushes cache)
---function 05h---
01h WORD number of timer ticks between cache flushes
---function 08h---
01h BYTE new flush-on-reboot flag (00h off, 01h on)
---function 0Ah---
01h BYTE full-track writes are
00h not cached
01h cached
---functions 0Bh,0Ch---
01h WORD number of 16K pages by which to increase/reduce cache size
---function 0Dh---
01h DWORD new address to which to chain on INT 13

Note: the previous address is not preserved