_file.asm

来自「用win32asm写的防火墙...基本的功能实现了」· 汇编 代码 · 共 78 行

ASM
78
字号
;====================================================================
_ReadFile		Proc
	local	@hFile,@dwBytesRead
;	int 3
;********************************************************************
;	展开环境变量  读取文件
;********************************************************************
	invoke	ExpandEnvironmentStrings,addr szFile,offset szFileName,sizeof szFileName
	invoke	CreateFile,offset szFileName,GENERIC_READ,FILE_SHARE_READ,0,\
			OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
	.if	eax !=	INVALID_HANDLE_VALUE
;	有初使化文件则读取该文件到内存中
		mov	@hFile,eax
		invoke	ReadFile,@hFile,addr szBuffer,sizeof szBuffer,addr @dwBytesRead,0
		invoke	CloseHandle,@hFile		;	关闭打开的文件
	.endif

	Ret
_ReadFile		Endp
;====================================================================
;	保存内存中的规则到文件
;====================================================================
_WriteFile		Proc
	local	@hFile,@dwBytesWrite
;	int 3
;********************************************************************
;	展开环境变量  读取文件
;********************************************************************
	invoke	ExpandEnvironmentStrings,addr szFile,offset szFileName,sizeof szBuffer
	invoke	CreateFile,addr szFileName,GENERIC_WRITE,0,0,\
			CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
	mov		@hFile,eax
	invoke	WriteFile,@hFile,addr szBuffer,sizeof szBuffer,addr @dwBytesWrite,NULL
	invoke	FlushFileBuffers,@hFile
	invoke	CloseHandle,@hFile		;	关闭打开的文件

	Ret
_WriteFile		Endp
;====================================================================
;	读取运行中驱动的缓冲区
;====================================================================
_ReadBuffer		Proc
	local	@hFile,@dwOutBytes

;	int 3
	invoke	CreateFile,offset szIpfilter,GENERIC_READ or GENERIC_WRITE,\
			FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL
	.if		eax != INVALID_HANDLE_VALUE		;	打开成功后返回句柄
		mov		@hFile,eax
		invoke	DeviceIoControl,@hFile,CTL_Read,offset szBuffer,\
				sizeof szBuffer,offset szBuffer,sizeof szBuffer,\
				addr @dwOutBytes,0
		invoke	CloseHandle,@hFile
	.endif

	Ret
_ReadBuffer		Endp
;====================================================================
;	保存运行中驱动的缓冲区
;====================================================================
_WriteBuffer		Proc
	local	@hFile,@dwOutBytes

;	int 3
	invoke	CreateFile,offset szIpfilter,GENERIC_READ or GENERIC_WRITE,\
			FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL
	.if		eax != INVALID_HANDLE_VALUE		;	打开成功后返回句柄
		mov		@hFile,eax
		invoke	DeviceIoControl,@hFile,CTL_Write,offset szBuffer,\
				sizeof szBuffer,offset szBuffer,sizeof szBuffer,\
				addr @dwOutBytes,0
		invoke	CloseHandle,@hFile
	.endif

	Ret
_WriteBuffer		Endp
;====================================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?