Tag: createfile

USB VCP连接偶尔会失败

我的问题很简单:我在工业20端口USB集线器上运行20个CP210x(Silicon Lab)设备。 在大约1000次打开港口的试验中,我遇到了一个问题:打电话给 CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 阻止而且不会返回。 在这种情况下,重复或重新启动我的软件无济于事。 只插入/插入设备有帮助。 当然,端口名称包括反斜杠,这是更高COM端口号所需要的。 每次通信后,端口都会关闭而不会出错 CloseHandle(comport_p); 我可以提供更多有关我的来源的详细信息,但请注意,相关部分是提到的行。 我的软件中是否还有其他一些问题需要考虑?或者是否存在驱动程序问题?

根据磁盘ID删除文件

如此处所述,使用带有FILE_DISPOSITION_INFO允许设置具有打开句柄的文件,以便在关闭所有句柄时删除该文件。 但是,我试图根据文件索引(磁盘ID)删除文件,该文件由FILE_DISPOSITION_INFO和OpenFileById检索,以便安全地删除目录中只有大小写不同的文件/目录。 这在我的用例中是安全的,因为在NTFS系统上,文件索引在删除之前是持久的 ,否定当前代码库处理的ReplaceFile的使用。 但是,在尝试删除句柄时,我收到错误87( ERROR_INVALID_PARAMETER )。 如果我使用CreateFileW创建的句柄删除,我没有遇到任何问题。 但是,我无法做到这一点,因为Windows无法区分同一案例的两个文件/文件夹,即使NTFS可以。 我也知道,使用OpenFileById打开的硬链接文件存在歧义,因为硬链接文件共享相同的磁盘ID。 可以认为硬链接文件的问题与此方案无关。 我只会按ID删除目录,不能硬链接。 我的OpenFileById调用中是否缺少参数或设置? 不知何故,在我的SetFileInformationByHandle调用? 我试过的其他方法: 使用OpenFileById句柄调用DuplicateHandle ,为dwDesiredAccess提供DELETE ,并使用它。 相同的ERROR_INVALID_PARAMETER结果。 将ReOpenFile与OpenFileById句柄dwDesiredAccess使用,为dwDesiredAccess提供DELETE ,并使用它。 相同的ERROR_INVALID_PARAMETER结果。 将ReOpenFile与OpenFileById句柄一起使用,为dwDesiredAccess提供DELETE ,并提供FILE_FLAG_DELETE_ON_CLOSE标志。 没有给出错误,但在关闭所有句柄后文件仍然存在。 这是一个最小但完整的例子,它可以重现这个问题: #include #include #include DWORD getFileID(LPCWSTR path, LARGE_INTEGER *id) { HANDLE h = CreateFileW(path, 0, 0, 0, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS, 0); if (h == INVALID_HANDLE_VALUE) return GetLastError(); […]