Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile
InternetOpen:
Initializes an application's use of the WinINet functions.
HINTERNET InternetOpen(
_In_ LPCTSTR lpszAgent,
_In_ DWORD dwAccessType,
_In_ LPCTSTR lpszProxyName,
_In_ LPCTSTR lpszProxyBypass,
_In_ DWORD dwFlags
);
Remarks
InternetOpen is the first WinINet function called by an application. It tells the Internet DLL to initialize internal data structures and prepare for future calls from the application. When the application finishes using the Internet functions, it should call InternetCloseHandle to free the handle and any associated resources.
InternetOpenUrl:
Opens a resource specified by a complete FTP or HTTP URL.
HINTERNET InternetOpenUrl(
_In_ HINTERNET hInternet,
_In_ LPCTSTR lpszUrl,
_In_ LPCTSTR lpszHeaders,
_In_ DWORD dwHeadersLength,
_In_ DWORD dwFlags,
_In_ DWORD_PTR dwContext
);
InternetReadFile:
Reads data from a handle opened by the InternetOpenUrl, FtpOpenFile, or HttpOpenRequest function.
BOOL InternetReadFile(
_In_ HINTERNET hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD dwNumberOfBytesToRead,
_Out_ LPDWORD lpdwNumberOfBytesRead
);
#include <windows.h>
#include <WinInet.h>
#include <iostream>
#pragma comment(lib,"wininet.lib") using namespace std; int DownLoader()
{
DWORD dwByteRead = ;
char szDownBuffer[];
memset(szDownBuffer, , );
BOOL bIntNetReadFile = TRUE;
BOOL bWriteFile = TRUE;
DWORD dwWritten = ; HINTERNET hintInternetOpen = InternetOpen("Testing", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, );
if (!hintInternetOpen)
{
InternetCloseHandle(hintInternetOpen);
return ;
}
HINTERNET hintInternetOpenUrl = InternetOpenUrl(hintInternetOpen, "http://w.x.baidu.com/go/mini/2/10100", NULL, , INTERNET_FLAG_RELOAD, );
if (!hintInternetOpenUrl)
{
InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return ;
} HANDLE hCreateFile = CreateFile("D:\\BaiDu2.exe", GENERIC_WRITE, , , CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, );
if (hCreateFile == INVALID_HANDLE_VALUE)
{
InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return ;
} while (bIntNetReadFile && bWriteFile)
{
bIntNetReadFile = InternetReadFile(hintInternetOpenUrl, szDownBuffer, sizeof(szDownBuffer), &dwByteRead);
if (!dwByteRead)
{
break;
} bWriteFile = WriteFile(hCreateFile, szDownBuffer, sizeof(szDownBuffer), &dwWritten, NULL);
if (!dwWritten)
{
break;
}
} InternetCloseHandle(hintInternetOpen);
InternetCloseHandle(hintInternetOpenUrl);
return ;
} int main()
{
DownLoader();
system("pause");
return ;
}
D盘下生成了下载的文件:
aaarticlea/png;base64,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" alt="" />
如果改为动态调用:
#include <windows.h>
#include <iostream>
#include "dynamicfreetokill.h" using namespace std; int main()
{ cout << hmWinINetDLL << endl;
if (!hmWinINetDLL)
{
cout << "HMDOULE" << endl;
}
pfINTERNETCRACKURL pfInternetCrackUrl = (pfINTERNETCRACKURL)GetProcAddress(hmWinINetDLL, "InternetCrackUrlW");
cout << pfInternetCrackUrl << endl;
if (!pfInternetCrackUrl)
{
cout << "InternetCrackUrlW" << endl;
}
pfINTERNETOPEN pfInternetOpen = (pfINTERNETOPEN)GetProcAddress(hmWinINetDLL, "InternetOpenW");
cout << pfInternetOpen << endl;
if (!pfInternetOpen)
{
cout << "InternetOpenW" << endl;
}
pfINTERNETCONNECT pfInternetConnect = (pfINTERNETCONNECT)GetProcAddress(hmWinINetDLL, "InternetConnectW");
cout << pfInternetConnect << endl;
if (!pfInternetOpen)
{
cout << "InternetConnectW" << endl;
}
pfHTTPOPENREQUEST pfHttpOpenRequest = (pfHTTPOPENREQUEST)GetProcAddress(hmWinINetDLL, "HttpOpenRequestW");
cout << pfHttpOpenRequest << endl;
if (!pfInternetOpen)
{
cout << "HttpOpenRequestW" << endl;
}
pfINTERNETSETOPTION pfInternetSetOption = (pfINTERNETSETOPTION)GetProcAddress(hmWinINetDLL, "InternetSetOptionW");
cout << pfInternetSetOption << endl;
if (!pfInternetOpen)
{
cout << "InternetSetOptionW" << endl;
}
pfHTTPSENDREQUEST pfHttpSendRequest = (pfHTTPSENDREQUEST)GetProcAddress(hmWinINetDLL, "HttpSendRequestW");
cout << pfHttpSendRequest << endl;
if (!pfInternetOpen)
{
cout << "HttpSendRequestW" << endl;
}
pfHTTPQUERYINFO pfHttpQueryInfo = (pfHTTPQUERYINFO)GetProcAddress(hmWinINetDLL, "HttpQueryInfoW");
cout << pfHttpQueryInfo << endl;
if (!pfInternetOpen)
{
cout << "HttpQueryInfoW" << endl;
}
pfINTERNETCLOSEHANDLE pfInternetCloseHandle = (pfINTERNETCLOSEHANDLE)GetProcAddress(hmWinINetDLL, "InternetCloseHandle");
cout << pfInternetCloseHandle << endl;
if (!pfInternetOpen)
{
cout << "InternetCloseHandle" << endl;
}
pfINTERNETSETFILEPOINTER pfInternetSetFilePointer = (pfINTERNETSETFILEPOINTER)GetProcAddress(hmWinINetDLL, "InternetSetFilePointer");
cout << pfInternetSetFilePointer << endl;
if (!pfInternetOpen)
{
cout << "InternetSetFilePointer" << endl;
}
pfINTERNETGETLASTRESPONSEINFO pfInternetGetLastResponseInfo = (pfINTERNETGETLASTRESPONSEINFO)GetProcAddress(hmWinINetDLL, "InternetGetLastResponseInfoW");
cout << pfInternetGetLastResponseInfo << endl;
if (!pfInternetOpen)
{
cout << "InternetGetLastResponseInfoW" << endl;
}
pfINTERNETREADFILE pfInternetReadFile = (pfINTERNETREADFILE)GetProcAddress(hmWinINetDLL, "InternetReadFile");
cout << pfInternetReadFile << endl;
if (!pfInternetOpen)
{
cout << "InternetReadFile" << endl;
} FreeLibrary(hmWinINetDLL);
system("pause");
return ;
}
Windows API 之 InternetOpen、InternetOpenUrl、InternetReadFile的更多相关文章
- C# Windows API
API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...
- Windows API 函数列表 附帮助手册
所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...
- Windows API Hooking in Python
catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...
- 初识【Windows API】--文本去重
最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...
- C#调用windows API的一些方法
使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1. 直接调用从 DLL 导出的函数. 2. ...
- Qt中使用Windows API
在Windows平台上进行开发,不可避免与Windows API打交道,Qt中使用的时候要添加对应API的头文件和链接lib文件,另外使用的Windows API的代码部分要使用#ifdef Q_O ...
- 在VBA中使用Windows API
VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个 ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- C#调用Windows API函数截图
界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...
随机推荐
- 设M=5^2003+7^2004+9^2005+11^2006,求证8|M。(整除理论,1.1.8)
设M=52003+72004+92005+112006,求证8|M. 证明: 前提:对于,52003让我们去构造8,即用8-3替换5 第一步:用8-3替换5,且仅替换一个, 第二步:进行分项,则前一项 ...
- boost log库
http://blog.csdn.net/sheismylife/article/category/1820481
- 2. Shell 传递参数
1. 概要 我们可以在执行 Shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- #!/bin/bas ...
- 单击Echart饼图实现数据钻取
使用场景和需求: 第一层饼图显示党员党龄分布的情况. 点击某个党龄段,查看拥有该党龄段的党支部. 默认显示3个党支部,余下的党支部合并为其它,点击其它,查看余下的党支部. 点击某个党支部,返回第一层饼 ...
- 欧几里得算法求最大公约数(gcd)
关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } ...
- HADOOP与ORACLE关联
安装Oracle和Oracle大数据连接器/OLH,尝试把HDFS中的数据文件装载到Oracle中的表 http://f.dataguru.cn/thread-460110-1-1.html 文档讲述 ...
- List循环与Map循环的总结
做了一下list和map的总结,没有什么技术含量,就全当复习了一下api. 测试环境是在junit4下,如果没有自己写一个main方法也是一样的. 首先是List的三种循环: @Test public ...
- TCP/IP,http,socket,长连接,短连接
TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...
- linux常用服务软件搭建及使用技巧
一.Webmin安装: Webmin 是一个基于浏览器的管理工具,可以应用于Linux 和其他一些平台,提供了可以完成很多管理和操作任务的图形化界面 •安装完成后,root 用户会被自动创建,密码为系 ...
- runat="server" 是什么意思?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...