我现在想做一个程序,目的是能够取得一个进程的唯一标识符(不管在什么操作系统上);
原来的办法是,根据进程取得该文件所在的路径,然后根据文件的PE格式,取得相应的唯一标识符,
可以实现目的.
现在遇到一个问题是, 虽然可以取得相应的文件路径, 可我的这个程序本身可能没有权限去读文件,所以根本没有办法去分析它的PE格式!
不知各位有没有什么好的办法? 如根据内存可以取得唯一标识符,或更改自己权限什么的?
高分等候....

解决方案 »

  1.   

    提高权限bool   UpPrivilege()   
      {   
              HANDLE   hToken;                             //   handle   to   process   token   
              TOKEN_PRIVILEGES   tkp;               //   pointer   to   token   structure   
              bool   result   =   OpenProcessToken(GetCurrentProcess(),   
                                                                            TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,     
                                                                            &hToken);   
              if(!result)         //打开进程错误   
                      return   result;   
              result   =   LookupPrivilegeValue(     NULL,     
                                                                              SE_DEBUG_NAME,   
                                                                              &tkp.Privileges[0].Luid);   
              if(!result)         //查看进程权限错误   
                      return   result;   
              tkp.PrivilegeCount   =   1;     //   one   privilege   to   set   
              tkp.Privileges[0].Attributes   =   SE_PRIVILEGE_ENABLED;   
              result   =   AdjustTokenPrivileges(   hToken,     
                                                                              FALSE,     
                                                                              &tkp,     
                                                                              sizeof(TOKEN_PRIVILEGES),   
                                                                            (PTOKEN_PRIVILEGES)   NULL,     
                                                                            (PDWORD)   NULL);   
              return   result;   
      }   
      

  2.   

    请问一下, 
     1. 自己可以给自己的进程增加权限吗? 那病毒进程岂不是无所不能了?
     2. 如果局域网上的一些share文件,没有给读权限,那也可以设置权限?
      

  3.   

    To:ainol(艾诺) ( )
    1。可以给你的进程提升权限,当然这个权限肯定不可能超过你进程所属用户权限的范围
    2。局域网上的share文件的权限应该是不能设置的,除非你是文件的所有者
      

  4.   

    获得进程路径后,对比一下两个exe咯.
      

  5.   

    也有的,楼主看看我的思路行不行,用readprocessmemory()去获得程序基地址4K内的内存内容,然后对比一下就可以了.
      

  6.   

    to huangwc(地主):
     谢谢,既然能当前用户能运行起来,肯定有权限; 但是, LookupPrivilegeValue AdjustTokenPrivileges 这些API只有在NT内核上才提供的,win98好像无法实现! (我说的是针对局域网内share的文件)
      

  7.   

    to KeSummer() 
       这好像是个好办法,但现在有很多PE格式的文件编译时,有这么个设置: 禁止取内存,写内存之类的.. (可能是防内存钩子吧)!
      

  8.   

    to krfstudio()
       就是同一个程序在不同OS上运行起来,产生的进程;