关于CreateFile创建句柄,出现系统找不到指定文件的问题

使用CreateFile读写文件 微软提供了强大的文件读写操作的编程接口,所以可以通过调用API函数实现文件的读写操作。这里通过CreateFile函数来实现。 要对文件进行读写操作,首先要调用CreateFile函数打开或者创建文件,函数具体格式如下: HANDLE CreateFile( LPCTSTR,lpFileName, //指向文件名 阅读详情

今天在书上看到了一个关于加壳的程序,前面有一个判定是否是PE文件的函数。于是拿来试试。结果出现了好多问题。最头痛的就是CreateFile返回的是INVALID_HANDLE_VALUE的问题。

最开始我以为是自己的文件地址出了问题。于是换了一个地址又一个地址。问题依然存在。在网上查找资料。有一篇可能是正解,当时我完全忽略了。我怎么会知道是参数类型的问题。

原函数代码:(部分)

char m_cFileName[256]={0};

BOOL IsPeFile(char *pFileName)
    {
        char *pTempPath = NULL;
        if(pFileName == NULL)
        {
            pTempPath = m_cFileName;
        }
        else
        {
            pTempPath = pFileName;
        }
        //创建指定文件句柄
        HANDLE hFile = CreateFile(pTempPath,GENERIC_READ,FILE_SHARE_HEAD,NULL,
            OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
        if(!hFile || hFile == INVALID_HANDLE_VALUE)
        {
            LPVOID lpMsgBuf;
            FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR) &lpMsgBuf,
                0,
                NULL);
            MessageBox(NULL,(LPCTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONINFORMATION);
            LocalFree(lpMsgBuf);
            return FALSE;
        }

.........................................................

int main()
    {
        char *filePath="D:\\各种工具\\PEditor\\PEditor.exe";
        BOOL t;
        t = IsPeFile(filePath);
        if(t)
        {    printf("OK\n");
            return 1;
        }
        printf("no\n");
        return 0;
    }

---------------------------------------------------------------------------------------------------------

上面的代码就会出现我的说的那个问题。我改正后的代码如下:

TCHAR m_cFileName[256]={0};

BOOL IsPeFile(TCHAR *pFileName)
    {
       TCHAR *pTempPath = NULL;
        if(pFileName == NULL)
        {
            pTempPath = m_cFileName;
        }
        else
        {
            pTempPath = pFileName;
        }
        //创建指定文件句柄
        HANDLE hFile = CreateFile(pTempPath,GENERIC_READ,FILE_SHARE_HEAD,NULL,
            OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
        if(!hFile || hFile == INVALID_HANDLE_VALUE)
        {
            LPVOID lpMsgBuf;
            FormatMessage(
                FORMAT_MESSAGE_ALLOCATE_BUFFER |
                FORMAT_MESSAGE_FROM_SYSTEM |
                FORMAT_MESSAGE_IGNORE_INSERTS,
                NULL,
                GetLastError(),
                MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR) &lpMsgBuf,
                0,
                NULL);
            MessageBox(NULL,(LPCTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONINFORMATION);
            LocalFree(lpMsgBuf);
            return FALSE;
        }

.........................................................

int main()
    {
        TCHAR *filePath=L"D:\\各种工具\\PEditor\\PEditor.exe";
        BOOL t;
        t = IsPeFile(filePath);
        if(t)
        {    printf("OK\n");
            return 1;
        }
        printf("no\n");
        return 0;
    }

这样就是把char换成了TCHAR。然后就成功了。

关于TCHAR与char的关系区别,百度很多,不介绍了。

做一个记录。



从文件句柄到文件路径 HOOK CreateFile/WriteFile/ReadFile及相应NT函数,实现对文件写等操作的控制,常常需要根据句柄求路径。第一个是网上找的文件映射方式,下面给出两个方式—— BOOL GetFileNameFromHandle(HANDLE hFile,TCHAR pszFileName[MAX_PATH]) { HANDLE hFileMap=NULL; PVOI 阅读详情

相关推荐

CreateFile() 打开与创建文件

CreateFile() 函数用以打开和创建文件,函数原型声明如下: HANDLE WINAPI CreateFile( __in LPCTSTR lpFileName, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwCreationDisposition,

我不是码农的博客~~~ 5194

CreateFile打开串口失败,返回INVALID_HANDLE_VALUE

近来在做串口方面的程序,使用CreateFile打开串口,却一直失败,代码如下: HANDLE hCom=CreateFile("COM10",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); 但问题的奇怪之处在于换一个硬件后,打开COM6端口,他又成功了。。。 查阅良久,找到了MSDN上的解释:http://support.m

筑梦★逐梦 8453

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统

本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。

weixin_36303305的博客 232

参数查阅~~~9.18

在Windows编程中,句柄(Handle)是一种用于标识、引用和操作资源的值,如文件句柄、进程句柄、窗口句柄等。在列举服务时,如果提供的缓冲区不足以容纳所有服务信息,这个变量将指示需要更大的缓冲区来接收服务信息。在调用列举服务的函数后,这个变量将表示实际返回的服务信息所需的缓冲区大小。是一个宏定义,用于在 Windows 编程中支持 Unicode 和 ANSI 字符串的编译选项下进行字符串文字的转换。在使用句柄的过程中,经常会对句柄的有效性进行检查,以确保句柄的正确性。,即一个无效的句柄值。

m0_72827793的博客 869

LiteratureReading:[2022] Reformer: The Efficient Transformer

所属机构:加州大学伯克利分校(U.C. Berkeley)和谷歌研究(Google Research)。电子邮件:kitaev@cs.berkeley.edu所属机构:谷歌研究(Google Research)。电子邮件:lukaszkaiser@google.com所属机构:谷歌研究(Google Research)。电子邮件:levskaya@google.com大型Transformer模型在许多任务上通常能够达到最先进的结果,但训练这些模型可能非常昂贵,尤其是在处理长序列时。

有朋自远方来,不亦乐乎。 1227

Nexus3国内高速下载指南:多版本全平台资源汇总

本文针对国内开发者从官网下载Nexus 3速度慢、易失败的问题,提供了详尽的解决方案。汇总了Windows、Linux、macOS等多个平台的Nexus 3历史及最新版本(如3.31.1)的国内高速下载链接,并附有版本选择建议与Linux环境下的快速启动指南,帮助用户高效获取和部署这一流行的仓库管理工具。

jwt8token的博客 432

文件操作

文件操作 文件的输入输出(I/O)服务是操作系统的重要部分。Windows提供了一类API函数来读、写和管理磁盘文件。MFC将这些函数转化为一个面向对象的类——CFile,它允许将文件视为可以由 CFile成员函数操作的对象,如Read和Write等。CFile类实现了程序开发者执行底层文件I/O需要的大部分功能。 并不是在任何时候使用CFile类都是方便的,特别是要与底层设备(如COM口、设

静故了群动 944

【Anaconda】解决“libGL error: MESA-LOADER: failed to open iris”问题

stackoverflow中的“libGL error: MESA-LOADER: failed to open iris”问题。而在自己创建的conda环境中的lib下出现`GLIBCXX_3.4.30’ not found 的情况。在上述解决方案中,将第一行命令的lib路径换成自己创建的conda环境lib路径,运行指令,问题解决。目前问题解决,总结一下查找资料以及解决方法。运行如下命令,发现本地支持。

quintus0505的博客 5024

用createfile 打开串口失败的解决方法

用createfile 打开串口时,当串口号小于10时,打开正常。 当串口号大于9时则打开失败,GetLastError 返回值为2,错误提示为 系统找不到指定的文件。 原因是设备名不对。当串口小10时设备名为COMx, 当串口时大于9时为\\\\.\\COMx,代码如下: /** 进入临界段 */ EnterCriticalSection(&m_csCommunicationSync); /** 把串口的编号转换为设备名 */ char szPort[15] = {0}; i

sense的专栏 8489

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4476

观测器选择与工程实践建议

摘要:永磁同步电机(PMSM)无传感器控制中,观测器选型需综合考虑应用场景、性能需求与成本。消费级(家电、工具)推荐滑模观测器(SMO),成本低、鲁棒性强;工业级(伺服、泵阀)适用扩展卡尔曼滤波器(EKF),精度高但计算复杂;车规级(EPS、主驱动)需混合观测器(SMO+EKF),兼顾全速域性能与可靠性。低速时需高频注入法,IPMSM更适用。SMO易实现但存在抖振,EKF调试复杂。未来趋势是混合架构与AI增强,提升适应性与性能。选型需权衡速度范围、电机类型、处理器能力及成本。

汽车软件开发 146

CreateFile函数详解

这几周是期末考试周,只能不断预习课本知识,以防挂科喽,博客暂时先停更几天,过几天一定会把博客补上的。。。。。。冲冲冲

寻梦&之璐 3518

(五)深入理解蓝牙BLE之“Beacon包格式详解”

蓝牙Beacon格式详解 本文重点在结合Bluetooth官网spec和几个例子来使beacon帧格式更加容易被理解。 广播帧格式: 首先beacon是蓝牙BLE广播包的一种,蓝牙广播帧格式如下: PS:其实BLE数据帧除了报头字段和数据字段定义与广播帧不同之外,前导/接入地址/长度/校验格式均相同。 广播帧数据字段格式: 数据字段最长为37个字节:6个字节的广播设备地址 + 31个字节广播数据。 广播数据的格式如下:AD Structure1 +AD Structure2 + .....

1万+

WINDOWS API ——CREATEFILE——创建文件

原文来自:http://www.cnblogs.com/wind-net/archive/2012/11/09/2762667.html 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象: 控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。     函数原型: 1 HANDLE CreateFile( 2

niushitang的专栏 1808

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

nwjs 使用node-webkit-updater 更新时报错registration_protocol_win.cc CreateFile 系统找不到指定的文件

nwjs 使用node-webkit-updater 更新时报错registration_protocol_win.cc CreateFile 系统找不到指定的文件报错如下:代码如下 : 报错如下: [0415/151142:ERROR:registration_protocol_win.cc(53)] CreateFile: 系统找不到指定的文件。 (0x2) 代码如下 : ...

baiyajin的博客 4805

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CreateFile() -- 打开与创建文件

CreateFile() 函数用以打开和创建文件,函数原型声明如下: HANDLE WINAPI CreateFile(   __in      LPCTSTR lpFileName,   __in      DWORD dwDesiredAccess,   __in      DWORD dwShareMode,   __in_opt  LPSECURITY_ATTRIBUTE

八零后 8983

CreateFile参数

CreateFile The CreateFile function creates or opens the following objects and returns a handle that can be used to access the object:  files  pipes  mailslots  communications resources  disk d

lgstudyvc的专栏 4602

【WINAPI】CreateFile创建或打开设备

1 HANDLE CreateFile( 2 PCTSTR pszName, 3 DWORD dwDesiredAccess, 4 DWORD dwShareMode, 5 PSECURITY_ATTRIBUTES psa, 6 DWORD dwCreationDi...

Calm_0909的博客 1207

CreateFile

这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。 HANDLE CreateFile(LPCTSTR lpFileName, //普通文件名或者设备文件名 DWORD dwDesi...

zxf347085420的博客 597

CreateFile详解

CreateFile详解 The CreateFile function creates or opens the following objects and returns a handle that can be used to access ,the object: CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。 * files (文件) *...

Cenyui的专栏 2027

十个以上串口加载问题-用CREATEFILE打开COM10

用CREATEFILE 打开1-9的<span class="t_tag" onclick="function onclick(){tagshow(event)}">串口没问题,但是打开COM10之类的串口号就返回-1了,请问是什么问题呢?=========================分割线=================================CreateFile()

左超 3515

创建文件 c语言,汇编语言CreateFile函数:创建新文件或者打开已有文件

函数 CreateFile 可以创建一个新文件或者打开一个已有文件。如果调用成功,函数返回打开文件的句柄;否则,返回特殊常数 INVALID_HANDLE_VALUEO 原型如下:CreateFile PROTO, ;创建新文件lpFilename:PTR BYTE, ;文件名指针dwDesi...

weixin_34377186的博客 1472

频繁通过win32api的createfile函数打开文件句柄导致内存泄漏

1、通过win32的createfile、writefile函数打开写入文件 void WriteLogThread(void* lpParameter) { LPLogData pData = (LPLogData)lpParameter; string logContent=pData->logContent; string logType=pData->logType; //释放传

fuck487的博客 4211

控制台句柄

  控制台程序通过句柄访问控制台的输入缓冲区及屏幕缓冲区。程序可以通过GetStdHandle, CreateFile, 或者 CreateConsoleScreenBuffer 函数打开所需的句柄。  GetStdHandle 函数提供了获取该程序所关联的标准输入(STDIN)、标准输出(STDOUT)及标准错误(STDERR)的句柄的机制,控制台创建时,系统创建了这些句柄。开始,STDIN

dtdn的专栏 5749
上一篇: PE结构学习笔记--关于AddressOfEntryPoint位置在文件中怎么确定问题
下一篇: 虚拟机解压.tar.gz出错问题
cogbee
博客等级 码龄17年 62粉丝 82原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值