Windows API中的坑

本文主页链接:Windows API中的坑

ExpandEnvironmentStrings

风险:

进程会继承其父进程的环境变量,在展开如%APPDATA%等目录时,有可能父进程对此环境变量进行过修改,那么可能你获取的就不是你想要的当前SESSION的%APPDATA%了。

建议:

使用SHGetFolderPath系列函数来做这件事。

GetModuleFileName

风险:

在DLL中调用时,若传入的instance参数为NULL,那获取的将是加载DLL的进程的EXE的路径,若需要获取DLL的路径,传入的instance参数需为DLL的hModule。

ShellExecuteEx

风险:

调用API之后,若初始MASK设置不正确,SHELLEXECUTEINFO结构体里的hProcess可能为空。

建议: 若确定要使用hProcess,则在调用ShellExecuteEx前确认SHELLEXECUTEINFO结构体的fMask成员设置为SEE_MASK_NOCLOSEPROCESS。而且MSDN上对hProcess成员的注释如下:

A handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if
a document to be launched is a URL and an instance of Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL.

Note ShellExecuteEx does not always return an hProcess, even if a process is launched as the result of the call. For example, an hProcess does not return when you use SEE_MASK_INVOKEIDLIST to invoke IContextMenu.

UrlDownloadToFile

风险1:

使用UrlDownloadToFile下载文件,若文件内容经过gzip压缩,即返回header包括Content-Encoding: gzip,若调用线程没有初始化COM,那UrlDownloadToFile会失败,因为urlmon不能正确处理压缩后的数据包。

建议:

调用此函数前需确保该线程已经调用CoInitialize。

风险2:

使用UrlDownloadToFile下载文件前它会自动先在本地缓存中查找此文件,所以可能最终得到的不是Server上的最新内容。

建议:

可以为URL添加随机参数以防止缓存,也可以使用DeleteUrlCacheEntry清理缓存后再使用UrlDownloadToFile下载文件。

Windows API中的坑,布布扣,bubuko.com

时间: 2024-08-02 06:09:08

Windows API中的坑的相关文章

windows API中CreateWindow()函数详解

CreateWindow函数详解 在注册完窗口类后就需要进行窗口的创建,用到的函数理所当然就是CreateWindow(), 而这个函数是基于窗口类的,所以还需要指定几个参数来制定特定的窗口.而且像一些不带边框的窗口是怎么创建的也是具有相当的技巧的,就是创建的是不带标题和边框的窗口,然后自己在客户区绘制程序的内容,能够制作个性化的应用程序. API解释 该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的).函数也指该窗口的父窗口或所属

Windows API中的数据结构

值得说明的是,win32开发是C语言编程,因此,搞明白数据类型还是非常重要的.Windows API因为历史原因或者为了方便在windows.h中将一些数据类型用typedef或者define宏重新进行定义. UINT表示C语言中的无符号整型unsigned int PSTR表示字符串指针char * WPARAM在16位时期的Windows中表示unsigned short int,而现在都是UINT LPARAM表示long WndProc函数的返回类型LRESULT实际上就是long 入口

Windows API中几个函数的总结

[DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr FindWindow(String className, String captionName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] public static extern IntPtr F

(一)Asp.net web api中的坑-【找不到与请求 URI匹配的 HTTP 资源】

在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议         WCF 基于SOAP的,数据格式是XML,可以支持各种各样的协议,像TCP,HTTP,HTTPS,Named Pipes, MSMQ. Web API(文章主讲) 简单的构建HTTP服务,.net平台上Web API 是一个开源的.理想的.构建REST-ful 服务的技术,支持MVC的特征,像路由.控制器

(四)Asp.net web api中的坑-【api的返回值】

void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 我这里并不想赘述这些返回类型, 可以参考博文http://blog.csdn.net/leonken88/article/details/53063693 和大神的http://www.cnblogs.com/landeanfen/p/5501487.html 我要说我遇到的坑是, public HttpResponseMessage DataHandler(RequestModel mod

(二)Asp.net web api中的坑-【http get请求中的参数】

webapi主要的用途就是把[指定的参数]传进[api后台],api接收到参数,进行[相应的业务逻辑处理],[返回结果].所以怎么传参,或者通俗的说,http请求应该怎么请求api,api后台应该怎么写,才能准确的接收到参数. HttpGet 请求 1.get请求,单参数 前端ajax var url = 'api/EnterOrExit/test';       var para = {};       para["Phone"] = "phone13880825221&q

(三)Asp.net web api中的坑-【http post请求中的参数】

接上篇, HttpPost 请求 1.post请求,单参数 前端 var url = 'api/EnterOrExit/GetData2'; var para = {}; para["Phone"] = "phone13880825221"; para["UID"] = "uid287572292"; $.post(url, para, function () { }, "application/json"

nginx配置为windows服务中的坑

网上搜索“nginx 配置为windows服务”,很容易搜索到使用windows server warpper来配置,于是按照网上的方法我从github上的链接下载了1.17版本,前面都很顺利,很容易就配置成服务了,但就在启动服务的时候出异常了.错误大致如下 nginx: [alert] could not open error log file: CreateFile() " e:\nginx/logs/error.log" failed (123: The filename, di

在VBA中使用Windows API

VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用程序协同工作以完成单个应用程序无法完成的任务.然而,使用VBA仅能控制操作系统的一小部分.Windows API提供了控制操作系统绝大多数方面的功能.下面,介绍在VBA中使用Windows API的一些知识. 理解APIs API只是一组函数,可用于处理组件.应用程序或操作系统.通常