INF: Async VMM Services May Be Called by Interrupt Handlers

ID Number: Q75864

3.00

WINDOWS

Summary:

As stated in Chapter 26 of the "Microsoft Device Development Kit

Virtual Device Adaptation Guide" (VDAG), enhanced mode Windows is a

single-threaded, non-reentrant operating environment. Because Windows

is non-reentrant, when a virtual device (VxD) is entered due to an

asynchronous interrupt, such as a hardware interrupt, the VxD can call

only a limited subset of virtual machine manager (VMM) and VxD

functions. These functions are declared as "async" services.

A VxD can declare a service that can be called from an interrupt

handler by using the "Async_Service" option for the BeginProc Macro.

(An async service routine should not call any non-async services.)

As listed in Chapter 26 of the VDAG, VMM event services are async

services. Also, virtual programmable interrupt controller (VPICD)

services are async services. Other async VMM services that may be

called from interrupt handlers are listed below. Event services are

included in the list. The chapter number reflects the chapter in the

VDAG where the services are discussed in detail.

Primary Scheduler Services (Chapter 24)

---------------------------------------

GET_CRIT_SECTION_STATUS

SIGNAL_SEMAPHORE

Time-Slice Scheduler Services (Chapter 25)

------------------------------------------

GET_EXECUTION_FOCUS

GET_TIME_SLICE_INFO

Event Services (Chapter 26)

---------------------------

SCHEDULE_GLOBAL_EVENT

SCHEDULE_VM_EVENT

CANCEL_GLOBAL_EVENT

CANCEL_VM_EVENT

CALL_GLOBAL_EVENT

CALL_VM_EVENT

Timing Services (Chapter 27)

----------------------------

GET_SYSTEM_TIME

GET_LAST_UPDATED_SYSTEM_TIME

GET_VM_EXEC_TIME

GET_LAST_UPDATED_VM_EXEC_TIME

UPDATE_SYSTEM_CLOCK

Information Services (Chapter 29)

---------------------------------

GET_CUR_VM_HANDLE

TEST_CUR_VM_HANDLE

GET_SYS_VM_HANDLE

GET_NEXT_VM_HANDLE

TEST_SYS_VM_HANDLE

VALIDATE_VM_HANDLE

TEST_DEBUG_INSTALLED

GET_VMM_REENTER_COUNT

GET_VMM_VERSION

List Services (Chapter 31)

--------------------------

LIST_ALLOCATE

LIST_ATTACH

LIST_INSERT

LIST_ATTACH_TAIL

LIST_REMOVE, HIGH_FREQ

LIST_DEALLOCATE

LIST_GET_FIRST

LIST_GET_NEXT

LIST_REMOVE_FIRST

Error Condition Services (Chapter 32)

-------------------------------------

FATAL_MEMORY_ERROR

FATAL_ERROR_HANDLER

CRASH_CUR_VM

Miscellaneous Services (Chapter 33)

-----------------------------------

BEGIN_REENTRANT_EXECUTION

END_REENTRANT_EXECUTION