Looks up data in virtual cache and can create a buffer if one is not found. Always uses EAX, ESI, and flags. If creating a buffer, ECX and EDX are also used.
Location | Contents or settings |
Carry flag | Set if the block is not found. Clear if the block is found. |
ESI | contains the cache block handle if the block is found or created. Otherwise, ESI contains the value zero. |
Zero flag | set if the buffer is not locked. |
EAX | contains the address of the buffer if ESI is nonzero. |
When a buffer is created, the value of its FSD private fields are set to zero.
On entry, AL contains one or more of the following options that determine how VCache_FindBlock acts:
Option | Description |
VCFB_Create | create buffer if not found |
VCFB_Hold | hold buffer if found |
VCFB_LowPri | low priority create |
VCFB_MakeMRU | make buffer most recently used |
VCFB_MustCreate | creation must succeed if there are any clean, unheld buffers (only valid with VCFB_Create) |
VCFB_RemoveFromLRU | remove buffer from LRU list entirely (for buffers that will be held for a long time). Cannot be used with VCFB_MakeMRU. |
Other options are obsolete and ignored.
On entry, AH contains the file system identifier.
On entry, EBX contains key1 information that includes the sector and byte #.
On entry, EDI contains key2 information that includes the volume id and file id.
NOTE: (0, 0) is not a valid key value.