mario911
驱动牛犊
驱动牛犊
  • 注册日期2005-04-04
  • 最后登录2021-10-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:4300回复:23

sfilter中无法显示中文文件名?

楼主#
更多 发布于:2005-04-05 08:03
如何才能让sfilter显示截获的中文文件名字?

最新喜欢:

LeopardLeopar...
yaolixing
驱动小牛
驱动小牛
  • 注册日期2006-06-27
  • 最后登录2010-07-15
  • 粉丝1
  • 关注0
  • 积分991分
  • 威望135点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-03 19:27
[quote]引用第19楼yandong_8212于2007-03-29 18:21发表的  :
paladinii 是骗人的,正确方法是:
1)定义全局变量ANSI_STRING gAS,在DriverEntry初始化.最后释放.

2)
PCHAR

感谢yandong_8212无私奉献的精神,国庆假期把这一课补上了
NTSTATUS
DriverEntry
(
   IN PDRIVER_OBJECT DriverObject,
   IN PUNICODE_STRING RegistryPath
)
{
    UNICODE_STRING   usString={0,0,0};
    WCHAR            ubuf[30]={L'\0'};
    CHAR             abuf[60]={'\0'};
    int              ubufLen=sizeof ubuf;
    ANSI_STRING      asString={0,0,0};
    
    
    swprintf(ubuf,L"asas");
    RtlInitUnicodeString(&usString,ubuf);
    DebugPrint(("%wZ\n",&usString)); //能显示  
    
    RtlInitUnicodeString(&usString,L"哈哈");
    DebugPrint(("%wZ\n",&usString));//什么都打印不出
    
    asString.Length = 0;
    asString.MaximumLength = sizeof abuf;
    asString.Buffer = abuf;

    RtlUnicodeStringToAnsiString(&asString, &usString, FALSE);
    DebugPrint(("%s\n",asString.Buffer));//显示“哈哈”
    DriverObject-> DriverUnload = DriverUnload;  
    return STATUS_SUCCESS;    
}
zhao_1981
驱动牛犊
驱动牛犊
  • 注册日期2007-08-13
  • 最后登录2007-09-17
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望8点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-15 10:21
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
地板#
发布于:2007-04-24 14:43
int ConvertFileNameWCHARToCHAR(PWCHAR pWChar,PCHAR pChar)
{
    UNICODE_STRING usFileName;
    ANSI_STRING asFileName;
    RtlInitUnicodeString(&usFileName, pWChar);

    asFileName.Length = 0;
    asFileName.MaximumLength = MAX_PATH;
    asFileName.Buffer = pChar;

    RtlUnicodeStringToAnsiString(&asFileName, &usFileName, FALSE);
    pChar[asFileName.Length] = 0;
    return asFileName.Length;
}
strpic
驱动小牛
驱动小牛
  • 注册日期2006-11-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望238点
  • 贡献值0点
  • 好评度156点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-03-29 19:41
楼上正解
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
5楼#
发布于:2007-03-29 18:21
paladinii 是骗人的,正确方法是:
1)定义全局变量ANSI_STRING gAS,在DriverEntry初始化.最后释放.

2)
PCHAR
TO_ANSI(
    IN PUNICODE_STRING pUS
    )
{
    RtlZeroMemory(gAS.Buffer, MAX_PATH);
    gAS.Length = MAX_PATH - sizeof(CHAR);
    gAS.MaximumLength = MAX_PATH;
    RtlUnicodeStringToAnsiString(&gAS, pUS, FALSE);
    return  gAS.Buffer;
}

3)DbgPrint("%s", TO_ANSI(pUS));
商务MSN:YanDong_8212@163.com
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2007-03-28 09:19
张书爱玉: 可否将你用UNICODE_STRING显示中文路径名的代码帖出来,谢谢
作一名真实,诚实,优秀的科技工作者!
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
7楼#
发布于:2007-03-27 22:14
用Unicode_string不就可以了嘛!中文有'\0'的嘛,用Unicode_string就可以了。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
8楼#
发布于:2007-03-25 19:11
其实在Buffer中已经得到了中文路径,只不过需要将获取的UNICODE_STRING路径名转换为ANSI_STRING就可以将汉字显示出来了。
作一名真实,诚实,优秀的科技工作者!
shenzhensong
驱动牛犊
驱动牛犊
  • 注册日期2007-03-03
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分170分
  • 威望18点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-03-21 10:27
照理说使用UNICODE应该是没问题的。
luckyshow00
驱动牛犊
驱动牛犊
  • 注册日期2007-03-12
  • 最后登录2008-11-24
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望36点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-03-20 22:08
晕,怎么一半就没了....
evercando
驱动牛犊
驱动牛犊
  • 注册日期2007-02-09
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-03-05 10:10
怎么没人回答了呢???
xhjjxm
驱动小牛
驱动小牛
  • 注册日期2005-08-03
  • 最后登录2010-07-28
  • 粉丝0
  • 关注0
  • 积分1011分
  • 威望208点
  • 贡献值0点
  • 好评度87点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-08-11 09:59
就是,怎么不说一下怎么处理的?
jjw
jjw
驱动牛犊
驱动牛犊
  • 注册日期2001-11-01
  • 最后登录2008-11-05
  • 粉丝0
  • 关注0
  • 积分-6分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-04-10 15:43
怎么处理的?
jjw
mario911
驱动牛犊
驱动牛犊
  • 注册日期2005-04-04
  • 最后登录2021-10-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-04-07 20:51
自己已经解决了
mario911
驱动牛犊
驱动牛犊
  • 注册日期2005-04-04
  • 最后登录2021-10-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-04-07 17:26
请教高人如何处理才能不丢失呢?万分感谢
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-04-07 10:01
 
Dbgprint输出ObjectAttributes->ObjectName->Buffer
DbgPrint(\"pathnamt %ws \",ObjectAttributes->ObjectName->Buffer);这样死活没法显示中文





 
另外,获取文件名在sfilter中不是这么简单的,需要做些处理。


DbgPrint(\"pathnamt %ws \",ObjectAttributes->ObjectName->Buffer);
这样处理dbgprint会把后边的中文截掉。例如C:\\test\\显示中文\\
会变成C:\\test\\而后边的中文就没有了。
Ideas for life!
mario911
驱动牛犊
驱动牛犊
  • 注册日期2005-04-04
  • 最后登录2021-10-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-04-06 19:23
用Dbgprint输出ObjectAttributes->ObjectName->Buffer
DbgPrint(\"pathnamt %ws \",ObjectAttributes->ObjectName->Buffer);这样死活没法显示中文
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-04-06 18:37
 
paladinii
你在呢。好久没看到你呢。呵呵。

lsq77兄弟,我在呢。上次给你回的邮件你收到了吗?最近怎么看不到你了?
Ideas for life!
paladinii
驱动中牛
驱动中牛
  • 注册日期2003-10-28
  • 最后登录2012-03-09
  • 粉丝0
  • 关注0
  • 积分282分
  • 威望74点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-04-06 18:34
上面的兄弟使用UNICODE_STRING显示所有字符集都是可以得,不管是中文还是什么拉丁文。你之所以不能正常显示估计是在你实现或者截获文件名处理的时候有问题,你可以把代码发上来我来帮你看看。另外,获取文件名在sfilter中不是这么简单的,需要做些处理。我想事实胜于雄辩看看我的filter拦截的名字。
Ideas for life!
上一页
游客

返回顶部