Передача параметров
Есть два типа передачи данных VxD-сервиса: основанные на регистрах и на стеке. В первом случае вы передаете данные сервисам через различные регистры и вы можете проверить флаг переноса после вызова сервиса, чтобы узнать, прошел ли вызов успешно. Сохранение значений в регистре не гарантируется. В случае с сервисами, принимающими значения через стек, вы загоняете в него параметры и получаете возвращаемое значение в eax. Такие сервисы сохраняются значения ebx, esi, edi и ebр. Большинство из регистровых сервисов ведут свое происхождение от Windows 3.x. Практически всегда вы сможете узнать к какому виду принадлежит тот или иной сервис по его названию. Если имя начинается с подчеркивания, например, '_HeaрAllocate', это стековый (C) сервис (кроме нескольких сервисов экспортированных из VWIN32.VXD). Если имя сервиса не начинается с подчеркивания, это регистровый сервис.