在乙個程式中知道正在執行在什麼作業系統環境下是個十分有用的功能,廢話不說,直接上原始碼,本人親測通過,與大家共享:
#pragma comment(lib, "user32.lib")
#define bufsize 256
typedef void (winapi *pgnsi)(lpsystem_info);
typedef bool (winapi *pgpi)(dword, dword, dword, dword, pdword);
bool getosdisplaystring( __out lptstr pszos)
if ( osvi.dwminorversion == 1 )
pgpi = (pgpi) getprocaddress(
getmodulehandle(text("kernel32.dll")),
"getproductinfo");
pgpi( osvi.dwmajorversion, osvi.dwminorversion, 0, 0, &dwtype);
switch( dwtype )
}if ( osvi.dwmajorversion == 5 && osvi.dwminorversion == 2 )
else stringcchcat(pszos, bufsize, text("windows server 2003, "));
// test for the server type.
if ( osvi.wproducttype != ver_nt_workstation )
else if ( si.wprocessorarchitecture==processor_architecture_amd64 )
else
}} if ( osvi.dwmajorversion == 5 && osvi.dwminorversion == 1 )
if ( osvi.dwmajorversion == 5 && osvi.dwminorversion == 0 )
else
}// include service pack (if any) and build number.
if( _tcslen(osvi.szcsdversion) > 0 )
tchar buf[80];
stringcchprintf( buf, 80, text(" (build %d)"), osvi.dwbuildnumber);
stringcchcat(pszos, bufsize, buf);
if ( osvi.dwmajorversion >= 6 )
return true;
} else }
#undef bufsize
// 需要注意的是:裡面那幾個系統的api給傳引數的時候一定要傳正確,一旦錯誤了windows不會給你任何提示,直接崩潰,連try...catch也無效。
十分鐘完成的作業系統
買了一本于淵的 orange s 乙個作業系統的實現 很是感謝作者的分享,正如作者所說的 os from scratch 於是想把學習過程中碰到的問題和心得記錄下來.好吧,直接進入主題,引導扇區,如下 作者已經把扇區的引導說的很清楚了,我就不再贅述了,我們重點看看這段 要幹什麼 其實就是在顯示器上列...
獲取作業系統資訊
osversioninfo osvi zeromemory osvi,sizeof osversioninfo osvi.dwosversioninfosize sizeof osversioninfo getversionex osvi 通過osvi這個結構體資訊來獲取作業系統資訊 typedef...
乙個作業系統的實現 十分鐘完成的作業系統
步驟 1.編輯器 例如記事本 寫入作業系統啟動 儲存為字尾名為.asm的檔案格式 2.安裝一款虛擬機器軟體以wm為例,新建乙個虛擬機器,注意作業系統與版本都選擇其他,建立的最後一步選擇 自定義硬體 進入後選擇 新增 選擇 軟盤驅動器 接著 建立空軟盤映像 在虛擬機器根目錄下任意建立乙個字尾名為.im...