C ++重命名文件@ C:\ Windows \ System32 \ Drivers

时间:2013-02-09 14:12:11

标签: c++ windows rename

已解决:看看后面的帖子

任务:重命名一个名为TabletFilter.sys(我的图形平板电脑驱动程序)的文件,因为Windows 8(我的操作系统)应用程序需要另一个驱动程序然后使用photoshop来获取引脚压力。我想写一个c ++程序,只需将所有驱动程序文件重命名为.old

基于cplusplus.com重命名示例的代码

#include <stdio.h>

int main ()
{
  int result;
  char oldname[] ="TabletFilter.sys";
  char newname[] ="TabletFilter.sys.old";
  result= rename( oldname , newname );
  if ( result == 0 )
    puts ( "File successfully renamed" );
  else{
    result= rename( newname , oldname );
    if( result == 0)
      puts ( "File successfully renamed" );
    else
      perror( "Error renaming file" );
  }
  return 0;
}

我也试过“以管理员身份运行”,但我仍然得到了

Error renaming file: No such file or directory

我该怎么办?


编辑:

该文件绝对位于同一个文件夹中......我将它们都复制到那里......即使在c:\ windows \我试了一下......我使用了清单

Executable: TabletRenameDriver.exe 
Manifest: TabletRenameDriver.exe.manifest
Sample application manifest file:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="TabletRenameDriver"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

我试过uiAccess是真是假。

是的,我的权利有问题 驱动程序已加载,但仍然可以更改他的名字...不知道为什么,但它可能。我试过了。我想用c ++来解决这个问题所以请不要告诉我有很多脚本语言可以很好地处理这个问题;-)我知道这个

3 个答案:

答案 0 :(得分:1)

错误消息

No such file or directory

表示当前目录不包含文件名"TabletFilter.sys""TabletFilter.sys.old"

你可以做的是:

  1. 指定文件的完整路径。
  2. 确保代码执行时的当前目录是包含文件的目录。
  3. 但是,即使你这样做,你的程序也可能会失败。您可能没有足够的权限来修改该文件夹的内容。如果操作系统已加载驱动程序,则您尝试重命名的文件可能会被锁定。

    正如@Hans指出的那样,file system redirector很可能会让你感到困惑。避免这种情况的最佳方法是使用64位进程。

    我认为没有理由在这里使用C ++程序。重命名文件是最适合脚本语言的任务。

答案 1 :(得分:0)

感谢您的帮助

我完成了我的程序,它现在完美无缺

注意:通过VS2012设置添加“requireAdministrator”uiAccess =“false”

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

void main ()
{
    bool success = false;
    bool somethingWentWrong = false;
    PVOID OldValue = NULL;
    if( Wow64DisableWow64FsRedirection(&OldValue) ) 
    {
        success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old");
        if(success){
          puts("from .sys to .sys.old");
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat not found"); somethingWentWrong = true;}
        }else{
          puts("from .sys.old to .sys");
          success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old not found"); somethingWentWrong = true;}
        }
        if(somethingWentWrong){
          puts ( "ERROR: File were set to standart!" );
          success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old not found"); somethingWentWrong = true;}
        }else
          puts ( "File successfully renamed" );
        Wow64RevertWow64FsRedirection(OldValue);
    }
    for(unsigned long tick = GetTickCount() / 1000;  tick + 2 > GetTickCount() / 1000;){
    }
}

只有48行代码......脚本可以缩短吗?

答案 2 :(得分:0)

Windows需要许多这些驱动程序才能启动。如果您成功重命名它们,重启时机器会发生不良事件 - 即您的机器无法启动。

作为一般规则,将所有内容留在C:\ Windows中,但对于C:\ Windows \ drivers目录,此建议的重要性要高十倍。轻触此文件夹及其中的任何内容即可。