Вызов VxD-сервисов
Вызов VMM- и VxD-сервисов осуществляется через макросы VMMCall и VxDCall. Оба макроса имеют одинаковый синтаксис. VMMCall используется, когда вам нужно вызвать VxD-сервисы, экспортированные VMM, а VxDCall используется, когда вы вызываете сервисы, экспортированные чем-то другим.
VMMCall service ; для вызова регистровых сервисов VMMCall _service, ; для вызова стековых сервисов
VMMCall и VxDCall фактически являются int 20h, за которым следует dword, что я уже объяснял в предыдущих туториалах, но макросы более удобны. В случае со стековыми сервисами, вы должны заключать список аргументов в угловые скобки.
VMMCall _HeapAllocate, <, HeapLockedIfDP>
_HeaрAllocate - это стековый сервис. Он принимает два параметра. Мы дожны заключить их в угловые скобки. Тем не менее, первый параметр - это выражение, которое макрос может интерпретировать неправильно, поэтому мы помещаем их внутри других угловых скобок.