| 
    
     |  | >ご存知かとは思いますが、K7の倍率は不規則に並んでいるのではなく、倍率テーブルをそのままの順番で表示しております。 >
 >この部分を変更してしまうと、コマンドラインオプションの FID, VID 部分も相当見直さなければならないためご了承ください。
 >
 >ちなみに、C3 は複数の FID が同じ倍率に割り振られていたり、リビジョンによって FID と倍率のマッピングが変わっていたりします。
 
 返答ありがとうございます。上記ご指摘の内容すべて承知しております。
 倍率変更の順不同は実際非常に不便なので、自分で直して使ってましたが
 バージョン変更の度に作りなすのも手間なので、
 手直した古いバージョンを 暫く使っておりました。
 本家の作者の方に対応頂ければと思い お願いして見た次第です。
 
 また暫くは、自前で手直した古いバージョンで行かせてもらいます。
 
 ---
 話は変わりますが、ドライバロード部分で以下の様なコーディングすると、
 同一実行ファイル(32Bit版)のみで32/64Bitの両環境での動作ができます。
 
 (SysInfoX64.sys/SysInfoX.sysを環境に応じて切り替えるだけです。
 厳密には SysInfoX64.sysコーディングの際 ポインタサイズに十分注意する
 必要があると思いますが、試した限りは大丈夫のようです。)
 
 ----
 横文字数の制限で、改行表示されているかも知れません。
 
 "Pcidll.c"
 
 #include <stdio.h>
 #include <windows.h>
 #include <winioctl.h>
 #include <stddef.h>
 #include <assert.h>
 
 #include "Pcidebug.h"
 #include "driverload.h"
 
 int GetFileInternalName(const char *file,char *name);
 
 #include "resource.h"
 
 int initialize(HMODULE ghInst);
 int initialize_vxd(HMODULE ghInst);
 void close(void);
 
 extern void init_isr(void);
 
 char DRIVERID[MAX_PATH];        //    "CrystalSysInfo"
 char DRIVERFILENAME[MAX_PATH];    //    "SysInfo.sys" or SysInfoX64.sys
 char DRIVERNAME[MAX_PATH];        //    "CrystalSysInfo"
 #define DRIVERFILENAME95    "SysInfo.vxd"
 
 HANDLE handle = NULL;
 int drivertype = 0;
 
 // DLLの状態を保存する変数
 static DLLSTATUS status = DLLSTATUS_OTHERERROR;
 //char DRIVERID[MAX_PATH];
 
 //
 // OSの種類を調べる。
 //
 // 戻り値    0: 取得できなかった
 //            1: windows 3.1
 //            2: windows 95
 //            3: windows NT
 //            4: windows NT x64
 //            -1:その他
 
 typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE hProcess,PBOOL Wow64Process);
 
 BOOL IsWow64(VOID)
 {
 BOOL bIsWow64 = FALSE;
 LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");
 
 if (NULL != fnIsWow64Process)
 {
 if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
 {
 // handle error
 bIsWow64 = FALSE;
 }
 }
 return bIsWow64;
 }
 
 //--------------------------
 
 int oscheck()
 {
 OSVERSIONINFO os;
 
 os.dwOSVersionInfoSize = sizeof(os);
 if(GetVersionEx(&os) == 0){
 assert(0);
 return 0;
 }
 switch(os.dwPlatformId){
 case VER_PLATFORM_WIN32s:
 return 1;
 case VER_PLATFORM_WIN32_WINDOWS:
 return 2;
 case VER_PLATFORM_WIN32_NT:
 return IsWow64() ? 4 : 3; //    Windowx XP 64Bit Edition or Windows NT
 default:
 return -1;
 }
 }
 
 ///////////////////////////////////////////////////////////
 //
 // DLLがLOADされたときにデバイスドライバーを登録、開始する
 // DLLがUNLOADされたときにデバイスドライバーを停止取り外す
 //
 ///////////////////////////////////////////////////////////
 
 BOOL APIENTRY DllMain(HMODULE hModule,
 DWORD ul_reason_for_call,
 LPVOID lpReserved)
 {
 char str[MAX_PATH];
 char name[64];
 int ostype, res;
 
 drivertype = 0;
 ostype = oscheck();
 if(!(ostype >= 2 && ostype <= 4)) return TRUE;
 
 GetModuleFileName(NULL,str,MAX_PATH);
 GetFileInternalName(str,name);
 
 switch(ostype)
 {
 case 4:// NT x64
 case 3:// NT
 strcpy(DRIVERID,"CrystalSysInfo");
 strcpy(DRIVERFILENAME, (ostype==4) ? "SysInfoX64.sys" : "SysInfo.sys");
 strcpy(DRIVERNAME,"\\\\.\\CrystalSysInfo");
 drivertype |= SYS_DRIVER_USE;
 status = DLLSTATUS_NOERROR;
 break;
 
 case 2:// 95 98の場合
 drivertype |= VXD_DRIVER_USE;
 drivertype |= PCIBIOS_READY;
 drivertype |= LIB_IO_FUNC_USE;
 status = DLLSTATUS_NOERROR;
 break;
 
 default:// NT 95/98以外の場合
 status = DLLSTATUS_NOTSUPPORTEDPLATFORM;
 break;
 }
 
 if(status == DLLSTATUS_NOTSUPPORTEDPLATFORM) return TRUE;
 
 switch( ul_reason_for_call ) {
 case DLL_PROCESS_ATTACH:
 init_isr();
 if(drivertype & SYS_DRIVER_USE) {
 res = initialize(hModule);
 } else if(drivertype & VXD_DRIVER_USE) {
 res = initialize_vxd(hModule);
 } else {
 res = 3;
 }
 switch ( res ){
 case 0:
 status = DLLSTATUS_NOERROR;
 break;
 case 2:
 handle = NULL;
 status = DLLSTATUS_DRIVERNOTLOADED;
 break;
 default:
 handle = NULL;
 status = DLLSTATUS_OTHERERROR;
 break;
 }
 break;
 case DLL_THREAD_ATTACH:
 break;
 case DLL_THREAD_DETACH:
 break;
 case DLL_PROCESS_DETACH:
 close();
 status = DLLSTATUS_OTHERERROR;
 break;
 }
 return TRUE;
 }
 
 以下同一内容なので、略
 
 |  |