-1

解決済み:後の投稿をご覧ください

タスク:TabletFilter.sys(私のグラフィックタブレットドライバー)というファイルの名前を変更します。これは、Windows 8(私のOS)アプリには、ピン圧力のフォトショップ以外のドライバーが必要なためです。そして、すべてのドライバーファイルの名前を.oldに変更するだけのC++プログラムを作成したいと思います。

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をtrueとfalseで試しました。

はい、権利に問題があります。ドライバーはロードされていますが、iamはまだ名前を変更できます...理由はわかりませんが、可能性があります。やってみました。私はc++でこの問題を解決したいので、plsは問題を非常にうまく処理できるスクリプト言語がたくさんあると私に言わないでください;-)私はこれを知っています

4

3 に答える 3

1

エラーメッセージ

No such file or directory

現在のディレクトリにファイル名"TabletFilter.sys"または"TabletFilter.sys.old".

できることは次のいずれかです。

  1. ファイルへのフル パスを指定します。
  2. コードを実行するときの現在のディレクトリが、ファイルを含むディレクトリであることを確認してください。

ただし、これを行っても、プログラムが失敗する可能性があります。そのフォルダの内容を変更するための十分な権限がない可能性があります。また、OS がドライバーをロードしている場合、名前を変更しようとしているファイルがロックされている可能性があります。

そして、@Hans が指摘するように、ファイル システム リダイレクタはあなたにとって混乱を招く可能性が非常に高いです。これを回避する最善の方法は、64 ビット プロセスを使用することです。

ここで C++ プログラムを使用する理由はありません。ファイルの名前変更は、スクリプト言語に最も適したタスクです。

于 2013-02-09T14:57:10.380 に答える
0

これらのドライバーの多くは、Windows の起動に必要です。名前の変更に成功した場合、再起動時にマシンに悪いことが起こります。つまり、マシンが起動しません。

原則として、すべてのものを C:\Windows だけに残しますが、このアドバイスは、C:\Windows\drivers ディレクトリでは 10 倍重要です。危険を冒してこのフォルダとその中の何かに触れてください。

于 2013-02-10T10:28:37.193 に答える
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 行のコードで ... スクリプトを短くすることはできますか?

PS: しばらくしてこの投稿を再訪すると、この問題に別の方法でアプローチする方法がかなりあると思います。ただし、要点はまだあります。このようなことをしたい場合は、管理者権限で実行する必要があります...そして、ループ、リスト/ベクター、および適切な文字列操作を使用する可能性があります:-P

于 2013-02-10T10:22:49.073 に答える