在ocx中创建管道失败,creatfile返回值为5,访问失败。如何解决?

xcw_pet 2018-06-07 10:48:49
我先用mfc做了一个demo创建 命名管道是可以的。 代码移植到ActiveX 里面做成ocx就出问题了。
查了一下是creatfile失败。 返回值为5.
以下是代码。有经验的朋友帮我看看。

ActiveXCtrl.cpp

HANDLE hPipe;
LPTSTR lpszPipename = _T("\\\\.\\pipe\\MyPipe");

while (1)
{
hPipe = CreateFile(
lpszPipename, // pipe name
GENERIC_READ | GENERIC_WRITE, // read and write access

FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, // no sharing
NULL, // default security attributes
OPEN_EXISTING, // opens existing pipe
0, // default attributes
NULL); // no template file


// 查看错误返回值
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
);

//返回值
CString ii;
ii.Format(_T("%d"),GetLastError());
AfxMessageBox(ii);
//返回值代码
MessageBox( (LPCTSTR)lpMsgBuf);
LocalFree( lpMsgBuf );


if (hPipe != INVALID_HANDLE_VALUE)
break;

// Exit if an error other than ERROR_PIPE_BUSY occurs.
if (GetLastError() != ERROR_PIPE_BUSY)
{
if (!WaitNamedPipe(lpszPipename, 20000))
{
//printf("Could not open pipe");
//system("pause");
strResult=_T("数据管道拥挤打开失败");
return strResult;
}
}

}

// The pipe connected; change to message-read mode.

dwMode = PIPE_READMODE_MESSAGE;
fSuccess = SetNamedPipeHandleState(
hPipe, // pipe handle
&dwMode, // new pipe mode
NULL, // don't set maximum bytes
NULL); // don't set maximum time
if (!fSuccess)
{
//printf("SetNamedPipeHandleState failed");
//system("pause");
strResult=_T("数据参数传输失败");
return strResult;
}
...全文
915 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2018-06-12
  • 打赏
  • 举报
回复
用代理进程打开管道。管道的DACL设置为低整合级别的进程也能访问 参考 https://blogs.msdn.microsoft.com/ieinternals/2009/11/30/understanding-the-protected-mode-elevation-dialog/ https://stackoverflow.com/questions/18982221/is-there-a-way-to-create-a-named-pipe-from-an-appcontainer-bho-on-ie11
xcw_pet 2018-06-12
  • 打赏
  • 举报
回复
引用 7 楼 wldrzx 的回复:
管理员运行IE,我前段时间刚做过类似,控件无法生成日志,管理员运行IE后就有日志了。(WIN10
我也是win10 ,的确我用打开ie用管理员权限就能打开管道。 但是这样不方便呀。 ie很少用管理员打开,要到ie程序的路径去打开ie。 这么说来就是权限不够, 能不能通过提高ocx权限来解决这个问题? 要如何提权? 我之前你的几个提权方式都不行的。
千寻港生惠香 2018-06-11
  • 打赏
  • 举报
回复
管理员运行IE,我前段时间刚做过类似,控件无法生成日志,管理员运行IE后就有日志了。(WIN10
赵4老师 2018-06-08
  • 打赏
  • 举报
回复
设置需要管理员权限?
xcw_pet 2018-06-08
  • 打赏
  • 举报
回复
引用 4 楼 wldrzx 的回复:
浏览器用的么?以管理员运行
对,在加载在html网页中调用。 您说的用管理员运行是ie用管理员运行?还是ocx生成的时候。权限用管理员生成?
xcw_pet 2018-06-08
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
设置需要管理员权限?
你指的是ie用管理员权限打开? 还是ocx用管理员权限生成运行?
千寻港生惠香 2018-06-08
  • 打赏
  • 举报
回复
浏览器用的么?以管理员运行
xcw_pet 2018-06-07
  • 打赏
  • 举报
回复
编译环境是 vs2010 win10

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧