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 Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

在 Windows 上安装 DeepSeek 的完整指南(最新推荐)

《在Windows上安装DeepSeek的完整指南(最新推荐)》在Windows上安装DeepSeek的完整指南,包括下载和安装Ollama、下载DeepSeekRXNUMX模型、运行Deep... 目录在www.chinasem.cn Windows 上安装 DeepSeek 的完整指南步骤 1:下载并安装