---- 具體的實現方式是由應用程序調用Windows API啟動DOS加密認證程序,并等待該程序結束,判定其返回碼,以確定是否有鑰匙盤。為此,需要對原來的DOS程序略加改動,將判定結果以返回碼的形式輸出,例如在Turbo C++ 3.0中使用exit(0)返回0,使用exit(1)返回1(至于DOS實現磁盤加密的方法由于資料很多,這里不作具體介紹)。而Windows應用程序讀取到返回碼以后,就可以確定下一步的動作。 更多內容請看常用軟件加密寶典 加密與解密技術 軟件插件專題,或 ---- 這里要害的代碼是啟動一個DOS程序,等待它結束,并得到返回碼。請參看下面的Delphi函數WinExecAndWait32: Function WinExecAndWait32(FileName : String; Visibility : integer):dWord; var zAppName:array[0..512] of char; zCurDir:array[0..255] of char; WorkDir:String; StartupInfo:TStartupInfo; PRocessInfo:TProcessInformation; begin StrPCopy(zAppName,FileName); GetDir(0,WorkDir); StrPCopy(zCurDir,WorkDir); FillChar(StartupInfo,Sizeof(StartupInfo),#0); StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; if not CreateProcess(nil, zAppName, { pointer to command line string } nil, { pointer to process security attributes } nil, { pointer to thread security attributes } false, { handle inheritance flag } CREATE_NEW_CONSOLE or { creation flags } NORMAL_PRIORITY_CLASS, nil, { pointer to new environment block } nil, { pointer to current Directory name } StartupInfo, { pointer to STARTUPINFO } ProcessInfo) then Result := 0 { pointer to PROCESS_INF } else begin WaitforSingleObject(ProcessInfo.hProcess,INFINITE); GetExitCodeProcess(ProcessInfo.hProcess,Result); end; end;