Virtual Devices (3.1) (vdag31qh.hlp) (
Table of Contents;
Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software,
purely for historical purposes.
If you're looking for up-to-date documentation, particularly for programming,
you should not rely on the information found here, as it will be woefully
out of date.
List_Create
◄Up► ◄Next► ◄Previous►
────────────────────────────────────────────────────────────────────────────
include vmm.inc
mov eax, Flags ; creation flags
mov ecx, NodeSize ; size in bytes of each node in list
VMMcall List_Create
jc error ; carry set if error
mov [List], eax ; list handle
The List_Create service creates a new list structure and returns a list
handle that virtual devices use in subsequent calls to other list services.
Parameter Description
────────────────────────────────────────────────────────────────────────────
Flags Specifies the creation flags. This parameter can be a combination
of the following values:
Value Meaning
─────────────────────────────────────────────────────────────────
LF_Use_Heap Allocates nodes on the system heap. This value
must not be used in combination with the LF_Async
value.
LF_Async Creates an asynchronous list that can be used
while processing interrupts.
LF_Alloc_Error Directs the List_Allocate service to returns with
carry flag set if new node could not be
allocated.
NodeSize Specifies the size in bytes of each node in the list.
Return Value
If carry flag is clear, the ESI register contains the list handle. The carry
flag is set to indicate an error.
Comments
If a virtual device requires large nodes, it should specify the LF_Use_Heap
value to force the nodes to be allocated from the system heap. All allocate
and deallocate calls for lists created in this way use the _HeapAlloc and
_HeapFree services to create and destroy nodes.
To access a list during hardware interrupts, a virtual device must set the
LF_Async value when creating the list. This forces list operations to be
atomic operations which cannot be re-entered. When using an asynchronous
list, the virtual device must disable interrupts before calling the list
services. The virtual device must disable interrupts even if when not
calling during an interrupt. The virtual device must use the pushf, cli, and
popf instructions to disable and re-enable interrupts. It must not use the
sti instruction to enable interrupts unless other documentation states that
this is premitted.
If the LF_Alloc_Error value is not specified, the system crashes the current
virtual machine if the List_Allocate service fails. If this value is
specified, List_Allocate returns with the carry flag set when an allocation
fails.
Uses
ESI, Flags
See Also
List_Allocate, List_Deallocate, List_Destroy
♦