利用字体隐藏文件夹什么软件可以隐藏打印机

&&&&希望用户选择打印时,列出来的打印机选择列表中,只有我指定的打印机可以选择(或者退而求其次选择其他打印机都不能起作用)。
&&&&我用Hook分别实现过winspool.drv&的&EnumPrinters&函数和OpenPrinter函数。发现如果在EnumPrinters中只返回我自己的打印机信息,也会列出所有的打印机,而如果使用OpenPrinter去只允许打开我自己的打印机的话,会导致打印机列表里面一个打印机都显示不出来。
&&&&我的实现思路应该没问题吧,不知道有没人使用相同方法实现过?我还没有找到使用这种方法实现了的代码。。所以也不是很肯定是哪里出了问题,求懂的大神指点迷津,在此谢过。
回复讨论(解决方案)
使用Detours库?
使用Detours库?
嗯,确实是。
-&-。&&&我的帖子要沉了吗。&&这方面的资料确实少,我也没有搜到。。唉。
-&-。&&问题还没解决。。。&继续等待大神来帮忙。
不会单步跟踪原来逻辑对应的汇编指令的话,很难hook成功的。
不会单步跟踪原来逻辑对应的汇编指令的话,很难hook成功的。
要这么复杂吗。。
你的需求完全可以通过权限控制解决,为何要hook?
你的需求完全可以通过权限控制解决,为何要hook?
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
为何要分配管理员权限?参考一种典型的内网结构,域结构可以实现分层的权限控制
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
额。&加密解密死循环怎么理解?
我做的是一个大产品中的一小部分功能啊。我也没法去改大的需求,只能改实现方式,但要实现的效果不能改啊。
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
为何要分配管理员权限?参考一种典型的内网结构,域结构可以实现分层的权限控制
你似乎改了我的大需求啊。&我的大需求不能改。&&这是基于产品上的。&我只能在单独的一台电脑上进行限制。。
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
为何要分配管理员权限?参考一种典型的内网结构,域结构可以实现分层的权限控制
你似乎改了我的大需求啊。&我的大需求不能改。&&这是基于产品上的。&我只能在单独的一台电脑上进行限制。。
为什么要分配管理员,公司内部这种行为是非常危险的!
你的需求完全可以通过权限控制解决,为何要hook?
仔细看了下确实是有打印机权限控制。但是如果用这种方式的话,就依赖于使用者的身份了啊。如果使用者是电脑的管理员,那我就算更改了权限,他也可以改回来吧?
为何要分配管理员权限?参考一种典型的内网结构,域结构可以实现分层的权限控制
你似乎改了我的大需求啊。&我的大需求不能改。&&这是基于产品上的。&我只能在单独的一台电脑上进行限制。。
为什么要分配管理员,公司内部这种行为是非常危险的!
这都什么跟什么啊。&&&都不知道说哪去了。
总算有了一丁点进展。&&我Hook&EnumPrinters函数,能够在我自己的Demo里控制只显示出我想要的打印机,但是windows设备管理里面看打印设备还是都能看到,打印的时候从菜单里面选取也能看到。
我Demo里特地用了两种方式,一种是GetProcessAddress方式,另一种显示调用。&并且发现windows枚举的时候也进了我的Hook函数,可是我只返回我的打印机信息,就是不起作用啊。。。。。
你hook自己的进程,这不是掩耳盗铃么。
你要Hook所有进程,让其他进程看不到你想隐藏的打印机。
或者在驱动层Hook,这样所有人都看不到了。
你hook自己的进程,这不是掩耳盗铃么。
你要Hook所有进程,让其他进程看不到你想隐藏的打印机。
或者在驱动层Hook,这样所有人都看不到了。
额。&没明白你意思。&&我用的注册表方式注入DLL,dll里hook了EnumPrinters函数,不等同于hook了所有进程吗?而且确实Hook到了(当然可以有些没hook到只不过我不知道而已)。
今天又搞了一天,
没什么进展,唯一的发现是wps的word和ie的打印里面可以hook所控制。
而记事本和系统的那个查看打印设备不能控制(虽然也走我的Hook函数,但是没有控制到)。
唉,求高人来指点指点啊,或者告诉下我怎么跟踪记事本程序在选择打印的时候执行了哪些流程啊
提醒:访问跨进程内存需要用VirtualAllocEx,参考下面:
void&MyGetListViewItem(HWND&hWindow)&{
&&&&int&&&&&&&&&&nLVItemC
&&&&int&&&&&&&&&&nC
&&&&DWORD&&&&&&&&dwProcessID;
&&&&HANDLE&&&&&&&hP
&&&&HWND&&&&&&&&&hHeaderC
&&&&LVITEM&&&&&&&lvItemL
&&&&HDITEM&&&&&&&hdItemL
&&&&DWORD&&&&&&&&dwBytesRead,&dwBytesW
&&&&BOOL&&&&&&&&&bSuccess,bWriteOK;
&&&&LPVOID&&&&&&&lpTextR
&&&&LPVOID&&&&&&&lpListItemR
&&&&LPVOID&&&&&&&lpHeadItemR
&&&&int&i,j;
&&&&GetWindowThreadProcessId(hWindow,&dwProcessID);
&&&&hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
&&&&if&(!hProcess)&goto&ABORT0;
&&&&lpTextRemote=VirtualAllocEx(hProcess,NULL,nMaxLen+1,MEM_COMMIT,PAGE_READWRITE);
&&&&if&(!lpTextRemote)&goto&ABORT1;
&&&&lpListItemRemote=VirtualAllocEx(hProcess,NULL,sizeof(LVITEM),MEM_COMMIT,PAGE_READWRITE);
&&&&if&(!lpListItemRemote)&goto&ABORT2;
&&&&lpHeadItemRemote=VirtualAllocEx(hProcess,NULL,sizeof(HDITEM),MEM_COMMIT,PAGE_READWRITE);
&&&&if&(!lpHeadItemRemote)&goto&ABORT3;
&&&&nLVItemCount=ListView_GetItemCount(hWindow);
&&&&hHeaderCtrl&=ListView_GetHeader(hWindow);
&&&&nColumns&&&&=Header_GetItemCount(hHeaderCtrl);
//&&init();
&&&&if&(nColumns&=0)&{
&&&&&&&&nColumns=1;
&&&&}&else&{
&&&&&&&&ln[0]=0;
&&&&&&&&for&(j=0;j&nCj++)&{
&&&&&&&&&&&&ZeroMemory(szBuf,nMaxLen+1);
&&&&&&&&&&&&bWriteOK=&WriteProcessMemory(hProcess,lpTextRemote,(LPVOID)szBuf,nMaxLen+1,(LPDWORD)&dwBytesWrite);
&&&&&&&&&&&&if&(!bWriteOK)&goto&ABORT4;
&&&&&&&&&&&&hdItemLocal.mask=HDI_TEXT;
&&&&&&&&&&&&hdItemLocal.cchTextMax=nMaxL
&&&&&&&&&&&&hdItemLocal.pszText=(LPTSTR)lpTextR
&&&&&&&&&&&&dwBytesWrite=0;
&&&&&&&&&&&&bWriteOK=WriteProcessMemory(hProcess,lpHeadItemRemote,(LPVOID)&hdItemLocal,sizeof(HDITEM),(LPDWORD)&dwBytesWrite);
&&&&&&&&&&&&if&(!bWriteOK)&goto&ABORT4;
&&&&&&&&&&&&SendMessage(hHeaderCtrl,HDM_GETITEM,(WPARAM)j,(LPARAM)lpHeadItemRemote);
&&&&&&&&&&&&bSuccess=ReadProcessMemory(hProcess,lpTextRemote,szBuf,nMaxLen+1,&dwBytesRead);
&&&&&&&&&&&&if&(!bSuccess)&goto&ABORT4;
&&&&&&&&&&&&if&(j&0)&strcat(ln,&|&);
&&&&&&&&&&&&strstrip(szBuf1,szBuf);
&&&&&&&&&&&&strcat(ln,szBuf1);
&&&&&&&&add1(ln);
//&&printf(&ListView的Columns数:&%d\n&,nColumns);
//&&printf(&---------------------------\n&);
&&&&for&(i=0;i&nLVItemCi++)&{
&&&&&&&&ln[0]=0;
&&&&&&&&for&(j=0;j&nCj++)&{
&&&&&&&&&&&&ZeroMemory(szBuf,nMaxLen+1);
&&&&&&&&&&&&bWriteOK=&WriteProcessMemory(hProcess,lpTextRemote,(LPVOID)szBuf,nMaxLen+1,(LPDWORD)&dwBytesWrite);
&&&&&&&&&&&&if&(!bWriteOK)&goto&ABORT4;
&&&&&&&&&&&&lvItemLocal.iItem=i;
&&&&&&&&&&&&lvItemLocal.iSubItem=j;
&&&&&&&&&&&&lvItemLocal.mask=LVIF_TEXT;
&&&&&&&&&&&&lvItemLocal.cchTextMax=nMaxL
&&&&&&&&&&&&lvItemLocal.pszText=(LPTSTR)lpTextR
&&&&&&&&&&&&dwBytesWrite=0;
&&&&&&&&&&&&bWriteOK=WriteProcessMemory(hProcess,lpListItemRemote,(LPVOID)&lvItemLocal,sizeof(LVITEM),(LPDWORD)&dwBytesWrite);
&&&&&&&&&&&&if&(!bWriteOK)&goto&ABORT4;
&&&&&&&&&&&&SendMessage(hWindow,LVM_GETITEMTEXT,(WPARAM)i,(LPARAM)lpListItemRemote);
&&&&&&&&&&&&bSuccess=ReadProcessMemory(hProcess,lpTextRemote,szBuf,nMaxLen+1,&dwBytesRead);
&&&&&&&&&&&&//从指定进程存储空间读取文本
&&&&&&&&&&&&if&(!bSuccess)&goto&ABORT4;
&&&&&&&&&&&&if&(j&0)&strcat(ln,&|&);
&&&&&&&&&&&&strstrip(szBuf1,szBuf);
&&&&&&&&&&&&strcat(ln,szBuf1);
&&&&&&&&add1(ln);
&&&&VirtualFreeEx(hProcess,lpHeadItemRemote,0,MEM_RELEASE);
&&&&VirtualFreeEx(hProcess,lpListItemRemote,0,MEM_RELEASE);
&&&&VirtualFreeEx(hProcess,lpTextRemote,0,MEM_RELEASE);
&&&&CloseHandle(hProcess);
//&&over();
//---------------------------------------------------------------------------
这个我知道啊。&我大概看了下windows核心编程22章API注入。我觉得现在问题是出在我不知道记事本和IE这些应用在打印的时候通过什么方式来枚举打印机的。
我也尝试了监控注册表中打印机列表,记事本和IE在枚举的时候没有去扫描注册表。
楼主可以试试,带A的和带W的一起hook
另外,可以试试GetPrinterDriverA,&GetPrinterDriverW等等之类的相关函数曲线方式解决问题
楼主可以试试,带A的和带W的一起hook
另外,可以试试GetPrinterDriverA,&GetPrinterDriverW等等之类的相关函数曲线方式解决问题
带A和带W的都HOOK了。
也试了OpenPrinter。
没有试GetPrinterDriver。
相关函数太多了。&我先解决其他问题,等空下时间来再试试其他函数。&唉。
更新一下动态,今天又试了勾EnumPrinterDrives也不行。&之前我就试过通过删除注册表里的驱动或者打印处理器,但是还是能枚举出来,所以系统应该不是通过驱动和处理器来枚举的。
这个需求挺奇怪啊。
这个需求挺奇怪啊。
有什么奇怪的。。&
Process&Monitor&实时监视文件系统、注册表、进程、线程和&DLL&活动。&
Process&Explorer&找出进程打开了哪些文件、注册表项和其他对象,已加载哪些&DLL&等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。
Process&Monitor&实时监视文件系统、注册表、进程、线程和&DLL&活动。&
Process&Explorer&找出进程打开了哪些文件、注册表项和其他对象,已加载哪些&DLL&等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。
-&-。&&只有你捧场啊&大神。
试试Detours库?
先下载windows_2000_source_code,
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\hostmib\hrprinte.c
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\lmmib2\prnt_lm.c
C:\windows_2000_source_code\win2k\private\shell\comdlg32\prnsetup.c
C:\windows_2000_source_code\win2k\private\shell\shell32\dllload.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer1.c
C:\windows_2000_source_code\win2k\private\shell\win16\comdlg\prnsetup.c
C:\windows_2000_source_code\win2k\private\ntos\w32\ntgdi\icm\icmui\profile.cpp
C:\windows_2000_source_code\win2k\private\shell\ext\systray\dll\fax.cpp
先下载windows_2000_source_code,
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\hostmib\hrprinte.c
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\lmmib2\prnt_lm.c
C:\windows_2000_source_code\win2k\private\shell\comdlg32\prnsetup.c
C:\windows_2000_source_code\win2k\private\shell\shell32\dllload.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer1.c
C:\windows_2000_source_code\win2k\private\shell\win16\comdlg\prnsetup.c
C:\windows_2000_source_code\win2k\private\ntos\w32\ntgdi\icm\icmui\profile.cpp
C:\windows_2000_source_code\win2k\private\shell\ext\systray\dll\fax.cpp
楼主这个项目搞定了,奖金至少分我一半哈!
先下载windows_2000_source_code,
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\hostmib\hrprinte.c
C:\windows_2000_source_code\win2k\private\net\snmp\subagent\lmmib2\prnt_lm.c
C:\windows_2000_source_code\win2k\private\shell\comdlg32\prnsetup.c
C:\windows_2000_source_code\win2k\private\shell\shell32\dllload.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer.c
C:\windows_2000_source_code\win2k\private\shell\shell32\printer1.c
C:\windows_2000_source_code\win2k\private\shell\win16\comdlg\prnsetup.c
C:\windows_2000_source_code\win2k\private\ntos\w32\ntgdi\icm\icmui\profile.cpp
C:\windows_2000_source_code\win2k\private\shell\ext\systray\dll\fax.cpp
楼主这个项目搞定了,奖金至少分我一半哈!
有没有奖金都不知道。。&
这个坎过不去估计要挨批斗。。o(???)o&唉
正在用APIMONITOR一个一个的看。。。
没有金刚钻,楼主也敢揽瓷器活。
报告一下喜讯。。&在使用APIMonitor一步一步跟踪后,终于知道了windows自己列举打印机的流程。
于今天下午在XP下测试通过了。
报告一下喜讯。。&在使用APIMonitor一步一步跟踪后,终于知道了windows自己列举打印机的流程。
于今天下午在XP下测试通过了。
我那份奖金呢?
可以分享一下您是怎么解决的吗?我现在也遇到同样的问题,可以分享一下吗}

我要回帖

更多关于 win7打印机被隐藏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信