Windows 95 VxD C Source Code for VANYDEVD

2024-01-17 14:32
文章标签 windows code source 95 vxd vanydevd

本文主要是介绍Windows 95 VxD C Source Code for VANYDEVD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2000年11月27日 09:13:00

Listing 3

/// VANYDEVDc.c

// --------------------------------------------// Dynamically loadable VxD for ANYDEV board// --------------------------------------------#define WIN32_LEAN_AND_MEAN // Excludes un-needed parts of windows.h#include "windows.h"#include >e:/ddk95/inc32/vmm.h<#include >e:/ddk95/inc32/vwin32.h<#include >e:/ddk95/inc32/debug.h<#include "VANYDEVD.H"// -------------------------------------// Externs defined in assembly module // -------------------------------------// These defined in assembly for the VMM.INC or VPICD.INC file inclusionextern DWORD GET_BD_MEM(void);extern DWORD Virt_IRQ(void);extern DWORD Get_IRQ_Status(void);extern void UNVirt_IRQ(DWORD IRQhandle);extern void End_ISR(DWORD IRQhandle);extern void Physically_Mask_IRQ(DWORD IRQhandle);extern void Physically_UNMask_IRQ(DWORD IRQhandle);// ------------------------// PRAGMA for this DATA // ------------------------// Establish segment#pragma data_seg ( "_LDATA","_LCODE")// ------------------------------------// Data structures MUST be INITIALIZED// ------------------------------------ADEV ANYDEVX = {0}; // Main structure for ANYDEV -- shared by app // ------------------------// PRAGMAS for this CODE // ------------------------// Establish segment#pragma code_seg ( "_LTEXT", "_LCODE" )//No stack checking for routines in this module#pragma check_stack(off)// ----------------// Disable hardware// ----------------void Disable_AnyDev(void){	//This would likely be a port WRITE to DISABLE the board's interrupt	 		}// ----------------// Enable hardware// ----------------void Enable_AnyDev(void){	//This would likely be a port WRITE to ENABLE the board's interrupt	 		}// --------------------------// ISR Processing for ANYDEV// --------------------------void Process_ISR(void){	//This is where the user might SET FLAGS and indicators in the ANYDEVX structure	//in order to notify the application that data is available below 1MB	 		}// -----------------// ISR for ANYDEV// -----------------void _declspec(naked)ISR_ANYDEV(void){	// Save registers	_asm sti	_asm pushad	_asm pushfd	//Process the ISR 	Process_ISR();	//End ISR	_asm clc	End_ISR(ANYDEVX.IRQhandle);	//Set GOOD return code	_asm clc	//Restore saved registers	_asm popfd	_asm popad	_asm ret;}// -------------------// Virtualize the IRQ// -------------------DWORD CVirt_IRQ(void){	// If in use by an instance of this program, RETURN with BAD code	if (ANYDEVX.IRQcount)		return (BOGUSADDRESS);	// If in use by another program, RETURN with BAD code	ANYDEVX.IRQstatus = Get_IRQ_Status();	if (ANYDEVX.IRQstatus)		return (BOGUSADDRESS);	// If IRQ NOT in use this point is reached	// Set BAD return code	ANYDEVX.IRQhandle = BOGUSADDRESS;	// Disable ANYDEV hardware		Disable_AnyDev();	// Get global memory address below 1mb	ANYDEVX.Global_addr_1MB = GET_BD_MEM();	if (ANYDEVX.Global_addr_1MB != BOGUSADDRESS)		{		// Virtualize the IRQ		ANYDEVX.IRQhandle = Virt_IRQ();			if (ANYDEVX.IRQhandle != BOGUSADDRESS)			{			// unmask the IRQ, set OK flag & increment IRQ count	 		Physically_UNMask_IRQ(ANYDEVX.IRQhandle);	 		ANYDEVX.IRQflags |= IRQ_VIRT_OK;			++(ANYDEVX.IRQcount);			}		}	return(ANYDEVX.IRQhandle);}// ----------------------// UN Virtualize the IRQ// ----------------------void CUNVirt_IRQ(DWORD IRQhandle){ // if IRQ has been successfully virtualized if ((ANYDEVX.IRQhandle != 0) &&  (ANYDEVX.IRQhandle != BOGUSADDRESS)) 	{	// Physically mask the IRQ and UN virtualized it	Physically_Mask_IRQ(ANYDEVX.IRQhandle);	UNVirt_IRQ(ANYDEVX.IRQhandle);	}// Set UNvirtualized flags and indicatorsANYDEVX.IRQhandle = BOGUSADDRESS;ANYDEVX.IRQflags &= ~IRQ_VIRT_OK;	return;}// ---------------------------------------// Set Good Return code for DIOC requests// ---------------------------------------void _declspec(naked)GoodReturnDIOC(void){	// Clear eax and carry flag for GOOD return	_asm xor eax,eax	_asm clc	_asm ret;}// ---------------------------------------// Set Bad Return code for DIOC requests// ---------------------------------------void _declspec(naked) BadReturnDIOC(void){	// NOTE: 50 is a FCN NOT SUPPORTED code -- ok to use	// SET carry flag for BAD return	_asm mov eax,50	_asm stc	_asm ret;}// ------------------------------// Routine for ANYDEV Device UNINIT  // ------------------------------void CVANYDEVD_Device_UNInit(){// Disable ANYDEV, Unvirtualize IRQ, set GOOD return code	Disable_AnyDev();				CUNVirt_IRQ(ANYDEVX.IRQhandle);		GoodReturnDIOC();				return;}// ------------------------------// Routine for ANYDEV Device INIT  // ------------------------------void CVANYDEVD_Device_Init(){DWORD retcode;	// Try to virtualize the IRQ	retcode = CVirt_IRQ();	// Set GOOD or BAD return code based on success	if (retcode == BOGUSADDRESS)		BadReturnDIOC();	else	    GoodReturnDIOC();	return;}// --------------------------------// Routine for ANYDEV Device IO ctrl  // --------------------------------void CVANYDEVD_Device_IOctrl(PDIOCPARAMETERS ptr){DWORD *obuf1;	// Field the DEV IO requests from VMM	switch(ptr-

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3159


这篇关于Windows 95 VxD C Source Code for VANYDEVD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616335

相关文章

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

C++实现俄罗斯方块(Windows控制台版)

C++实现俄罗斯方块(Windows控制台版) 在油管上看到一个使用C++控制台编写的俄罗斯方块小游戏,源代码200多行,B站上也有相关的讲解视频,非常不错,值得学习。 B站讲解视频地址为:【百万好评】国外技术大神C++游戏编程实战教程,油管580W收藏,新手10小时入门,并快速达到游戏开发能力(中英字幕) B站 CSDN博主千帐灯无此声还为此写了一篇博客:C++实现俄罗斯方块(源码+详解),讲

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

Windows下php扩展开发c++动态库

PHP扩展开发,从零了解到初步完成一个小项目,经过三天的仔细研究,现整理如下 一、需求介绍 PHP扩展开发,调用自己之前的c++动态库,完成功能 二、项目之前 系统:windows xp  开发工具:vs 2008 web环境:apache2.4  PHP5.3.29-VC9-ts-x86 aphach和PHP 环境之前已经搭建完成 PHP源码:去官网http://www.php.n

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S