導航:首頁 > 編程語言 > windows內核編程是幹嘛

windows內核編程是幹嘛

發布時間:2022-09-10 19:46:02

A. Windows內核編程的簡介

內核程序是運行在Ring0級的,因此內核程序要比應用層上的普通Ring3級程序有更高的許可權。因此內核編程的應用,往往給傳統軟體帶來更強的功能,實現技術上的飛躍。同理,黑客們也將傳統的攻擊程序或潛行程序從Ring3搬到了Ring0級去,以便於更隱蔽、更有效的監視或控制目標系統(如Rootkit)。

B. 關於Windows內核編程的問題

其實Windows內核編程不但有用,而且常用。很多我們每天都使用的軟體,就毫無疑問的使用了Windows內核編程的技術。最典型的就是實時監控的殺毒軟體。此外還有防火牆、虛擬光碟機、以及90%的驅動程序。這些程序的有一個共同的特點,他們的一部分組件,是作為Windows的一部分,能對 Windows上運行的所有的應用程序起作用。
因此內核編程的應用,往往給傳統軟體帶來更強的功能,實現技術上的飛躍。
舉個例子。我們常常聽說,對文件進行加密,可以使文檔更加安全。對文件加密並不需要任何內核組件。我們可以寫一個應用程序,讀入文件,加密數據,然後重寫為一個加密文件。解密也可以同樣如此。
但是實際上這並不滿足一般的用戶需求。對一個公司的員工來說,那些「重要的文檔」很可能就是每天工作所用的文件。想像一下,他必須要每天從伺服器上下載加密的文件,然後用解密工具解密。然後用Office開始工作。工作完畢後,用加密工具加密,再上傳,然後刪除工作文檔。且不說大部分時間文檔是以解密的方式保存在硬碟上的不安全性,這個工作流程是可以接受的嗎?沒有人會接受的。
比較「人性化」的方式就是讓Office可以直接打開已經加密的文檔。保存的時候,直接就保存成加密的文檔。硬碟上,這個文檔始終是加密的。而且對合法的用戶透明。對非法的用戶,則只能看見密文,從而無法編輯也無法閱讀。而且也不僅僅Office,還有AutoCAD、Visual Studio、Photoshop等等用戶可能用於編輯機密文件的所有的工具。這是可以實現的嗎?如果我們不能去修改Office和其他的工作軟體。
這當然是可以實現的。既然我們編寫Windows內核程序,當然可以讓Windows的文件系統從硬碟讀取文件的時候,對特定的進程進行特別的解密。等這些軟體讀取到數據的時候,它們讀到的已經是正常的數據了。這個過程和實時掃描病毒的原理是一樣的,使用一個文件過濾驅動程序。這就是讀者可能已經聽到過的文件透明加密技術。
在和《天書夜讀:從匯編語言到Windows內核編程》一書同一系列的《寒江獨釣——Windows內核編程與信息安全》(預計明年出版)中,對鍵盤過濾、硬碟過濾、文件過濾、網路過濾等安全相關的內核編程,都有詳盡的講解和例子。
內核編程的另一個特點是:這些代碼運行在R0級。R0級別是最高特權級別。對CPU有完全控制的能力。這非常的適合一些安全軟體,當然也適合做破壞的工作。因為內核程序有最高(也就是根)許可權,這樣的技術在安全領域(或者破壞領域)被稱為rootkit技術。rootkit技術是當前安全領域最熱門的技術之一。
許多病毒使用了rootkit技術。用來隱藏病毒文件,竊取密碼、發送攻擊包等等。rootkit病毒感染後極難清除,在感染前提前防範是最有效的辦法。
Windows內核確實沒有公開源代碼。但是MS提供Windows內核程序的開發包:WDK。WDK實際上主要用於開發驅動程序。而驅動程序基本上都是內核程序。WDK提供的頭文件以及部分源代碼,實際上就是Windows內核的代碼的一部分。有部分驅動程序(比如FAT32文件系統)的代碼是完全公開的。我們也可以在這里看到Windows內核開發者的代碼風格。同時,微軟也提供了所有Windows版本的符號表在網上供研究者下載。並提供了功能無比強大的調試器WinDbg。有了它們,你就可以輕松的調試Windows內核了。無論是你自己寫的代碼的部分,還是Windows內核開發者們編寫的部分。雖然看到的是匯編語言,但是函數名和全局變數名都是存在的。而且,所有的這些(WDK、WinDBG,符號表)都是免費的。

C. windows編程主要能實現什麼或者它有什麼作用

一、Windows中的映射模式
1、Windows定義映射模式的目的
經過我的綜合,Windows定義映射模的目的又以下幾個方面:1、不同人的使用習慣。不同國家的,不同地區,以及不同的人因為習慣喜歡用不同的度量單位,有的人人喜歡用英寸,而有的人喜歡用公制中的厘米,毫米等。其他的人又喜歡用另外一些單位。、2、使軟體與硬體向分離開來。讓開發的軟體能夠最大限度的與硬體無關。3、提供邏輯和物理的一種轉換。就相當於銀行的利率。
2、默認的映射模式
默認的映射模式使MM_TEXT,它使以象素為單位的。X軸向左為正,Y軸向下為正。默認的坐標原點在左上角。
3、固定比例映射模式
固定比例的映射模式有MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWIPS種。它們默認的坐標原點都使在左上角。其區別在於每一個邏輯單位對應的物理大小不一樣。所對用的邏輯單位分別為0.1毫米,0.01毫米,0.01英寸,0.001英寸,1/1440英寸(0.0007英寸)。
4、可變比例映射模式
對於可變比例的映射模式用戶可以自己定義一個邏輯單位代表的大小,其大小可以任意。也可以讓這個大小隨環境改變而改變。有MM_ISOTROPIC,MM_ANISOTROPIC這兩種映射模式。其邏輯單位的大小等於視口范圍和窗口范圍的比值。兩者的不同在於前者要求X軸和Y軸的度量單位必須相同,而後者沒有這樣的限制。
二、Windows中的幾種坐標體系
1、屏幕坐標
屏幕坐標描述物理設備(顯示器、列印機等)的一種坐標體系,坐標原點在屏幕的左上角,X軸向右為正,Y軸向下為正。度量單位是象素。原點、坐標軸方向、度量單位都是不能夠改變的。
2、設備坐標(又稱物理坐標)
設備坐標是描述在屏幕和列印機顯示或列印的窗體的一種坐標體系。默認的坐標原點是在其客戶區的左上角。X軸向右為正,Y軸向下為正。度量單位為象素。原點和坐標軸方向可以改變,但是度量單位不可以改變。
3、邏輯坐標
邏輯坐標是在程序中控制顯示,列印使用的坐標體系。該坐標系與定義的映射模式密切相關。默認的映射模式是MM_TEXT。我們可以通過設置不同的映射模式來改變該坐標體系的默認行為。
三、邏輯坐標和設備坐標之間的轉換
現有如下代碼:
void CMapModeView::OnPaint()
{
CPaintDC dc(this);

//獲取設備類的設置
CPoint ptOrgView,ptOrgWindow;
CSize sizeView,sizeWindow;
CString strMsg;

ptOrgView=dc.GetViewportOrg();//獲取視口原點
ptOrgWindow=dc.GetWindowOrg();//獲取窗口原點
sizeView=dc.GetViewportExt();//獲取視口范圍
sizeWindow=dc.GetWindowExt();//獲取窗口范圍

strMsg.Format(_T("Viewport Extent:(%d,%d),\tViewport Org:(%d,%d)\tWindow Extent:(%d,%d)\tWindow Org(%d,%d)"),
sizeView.cx,sizeView.cy,ptOrgView.x,ptOrgView.y,
sizeWindow.cx,sizeWindow.cy,ptOrgWindow.x,ptOrgWindow.y);
TRACE("%s\n",strMsg);

//設置映射模式以及原點
dc.SetMapMode(MM_TEXT);//設置映射模式
dc.SetWindowOrg(100,100);//設置窗口的坐標原點
dc.SetViewportOrg(200,200);//設置視口的坐標原點

dc.SetWindowExt(5,10);//改語句僅對可變比例映射模式有效
dc.SetViewportExt(1,1);//同上

ptOrgView=dc.GetViewportOrg();
ptOrgWindow=dc.GetWindowOrg();
sizeView=dc.GetViewportExt();
sizeWindow=dc.GetWindowExt();
strMsg.Format(_T("Viewport Extent:(%d,%d),\tViewport Org:(%d,%d)\tWindow Extent:(%d,%d)\tWindow Org(%d,%d)"),
sizeView.cx,sizeView.cy,ptOrgView.x,ptOrgView.y,
sizeWindow.cx,sizeWindow.cy,ptOrgWindow.x,ptOrgWindow.y);
TRACE("%s\n",strMsg);

//將點(300,400)從邏輯坐標體系映射到設備坐標體系。
CPoint ptMap;
ptMap=CPoint(300,400);
dc.LPtoDP(&ptMap);
strMsg.Format(_T("The Orginal Point(In LP):CPoint(300,400),Convert to DP is:CPoint(%d,%d)"),
ptMap.x,ptMap.y);
TRACE("%s\n",strMsg);

//將點(300,400)從設備坐標體系映射到邏輯坐標體系
ptMap=CPoint(300,400);
dc.DPtoLP(&ptMap);
strMsg.Format(_T("The Orginal Point(In DP):CPoint(300,400),Convert to LP is:CPoint(%d,%d)"),
ptMap.x,ptMap.y);
TRACE("%s\n",strMsg);
}
以上代碼最後調試輸出結果為:
Viewport Extent:(1,1), Viewport Org:(0,0) Window Extent:(1,1) Window Org(0,0)
Viewport Extent:(1,1), Viewport Org:(200,200) Window Extent:(1,1) Window Org(100,100)
The Orginal Point(In LP):CPoint(300,400),Convert to DP is:CPoint(400,500)
The Orginal Point(In DP):CPoint(300,400),Convert to LP is:CPoint(200,300)
按照MSDN上,函數SetWindowOrg(x,y)設定設備坐標下的點(x,y)對應於邏輯坐標的原點。SetVieportOrg(x,y)設定邏輯坐標下點(x,y)對應邏輯坐標的原點。而實際上如果同時設置了邏輯坐標和設備坐標原點的話,那麼以上的說法是錯誤的。
在默認映射模式MM_TEXT下,一個邏輯單位對應於設備坐標下的一個象素。改變默認原點以後的坐標體系如下圖所示:
(0,0) Dx,Lx (0,0)
(100,100) Lx
(200,200) Dx
.(300,400)

Dy,Ly Ly Dy
在VC中坐標系的轉換和數學中的數學轉化是不一樣的。在這里是以距離為標准。首先看一下如何把點(300,400)如何從設備坐標轉換成邏輯坐標。
在設備坐標體系下,點(300,400)與Y軸的距離為100個邏輯單位。那麼所對應的邏輯坐標也要滿足與邏輯坐標Y軸的距離為100個單位。又1個邏輯單位對應1個象素。所以所對應的設備坐標的X值為100+100=200。同樣可以出對應的邏輯坐標的Y值為300。
按照同樣的方法,我們也可以把邏輯坐標下的點(300,400)轉換成設備坐標。在邏輯坐標下,點

D. 我想學習Windows系統內核的編程。應該從何入手呢我已經撐握了C、C++語言。

標准windows不是嵌入式系統。embeded windows是指微軟的移動設備操作系統。
Windows系統內核的編程。。這個命題稍微難了點,如果只掌握了語言的話。
首先要簡單了解windows的運行機制,windows核心編程(Windows Via C/C++)這本書不錯。
然後看你的內核編程方向了,驅動?服務?破解?中間件?側重不同,需要掌握的東西也不同,首先要熟悉各個方向和框架,然後針對性的去看,沒有系統的項目去做做,很難說掌握好的。

E. Windows內核(驅動)編程中的線程問題

可以使用函數PsCreateSystemThread,用起來和ring3差不多,ring0編程更要注意線程同步問題,否則很容易BSOD(藍屏死機)

F. Windows操作系統中的:內核, dll, AP,I都是做什麼的

內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬體的安全訪問的一部分軟體,這種訪問是有限的,並且內核決定一個程序在什麼時候對某部分硬體操作多長時間。內核的分類可分為單內核和雙內核以及微內核。嚴格地說,內核並不是計算機系統中必要的組成部分。

動態鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。

API(Application Programming Interface),應用程序編程介面。是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體的以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。

G. WINDOWS內核編程是匯編語言嗎

Windows內核是用C語言寫的。世界上絕大部分的系統內核均使用C語言完成,古老的系統使用是因為當時C語言尚屬先進,現代系統使用是因為C語言兼容性好。
對於windows系統來說只有硬體抽象層和其之下的是由匯編完成的,在此之上就是C語言了。

你說的那些概念都是操作系統里的概念,與具體的語言實現無關。也就是說不管使用何種語言最終生成的可執行程序(或庫)均具有你說的那些結構,因為這是windows執行必須的。比如PE文件只是一種格式,入口點只是一個相對位置,導入表函數只是一些位置的排列。

當然你學過匯編後會更好的理解,不學也無妨。因為匯編介紹了計算機底層的實現,這些結構是最底層的結構嘛。看看操作系統就明白了。

你可以參考一下MS press的windows internals一書。

H. 《WINDOWS程序設計》和《WINDOWS核心編程》的區別

一、作者不同

1、WINDOWS核心編程:是2008年5月機械工業出版社出版的圖書,作者是(美)Jeffrey Richter。

2、WINDOWS程序設計:是2010年清華大學出版社出版的圖書,作者是(美)佩措爾德,譯者是方敏、張勝、梁路平。

二、內容不同

1、WINDOWS核心編程:從基本概念入手,全面系統地介紹了Windows底層實現機制、Windows應用程序的基本構件以及各類Windows API等,並列舉了大量應用程序示例。

2、WINDOWS程序設計:涵蓋基礎知識和中高級主題,全面地介紹了Windows程序設計所涉及的細枝末節,旨在幫助讀者從高屋建瓴的角度,建立完整的知識體系,為以後的職業生涯奠定良好的基礎。


三、作用不同

1、WINDOWS核心編程:主題廣泛,內容豐富,講解深入而精闢。透過這本Windows編程經典,我們可以在專家的悉心指導下,洞悉Windows編程精華,深入了解高級編程技巧,編寫出高性能的Windows應用程序。

2、WINDOWS程序設計:適合任何層次的Windows程序員閱讀和參考,是幫助梳理和建立Windows知識體系的理想讀物。


I. windows編程是什麼

windows 編程就是編譯的程序可以在windows環境下運行 可以用的語言很多了,如VB,VC,Delphi,java,C#等等,很多編程軟體要調用系統的API函數,MFC,微軟基礎類(Microsoft Foundation Classes),同VCL(delphi的庫)類似,是一種Application Framework,隨微軟Visual C++ 開發工具發布。

J. 現在做windows內核編程前景如何

rootkit之類的有前途,走擺到可以進殺軟公司或者反外掛公司,走黑道的話,呵呵............

閱讀全文

與windows內核編程是幹嘛相關的資料

熱點內容
華為交換機dhcp配置命令 瀏覽:314
androidbitmap縮小 瀏覽:271
單片機串口控制燈 瀏覽:84
大訊雲伺服器安裝視頻 瀏覽:784
華為演算法領先世界 瀏覽:654
linux路由重啟 瀏覽:566
php的模板編程 瀏覽:320
編譯器原理與實現書 瀏覽:709
dos選擇命令 瀏覽:17
apm固件編譯到單片機 瀏覽:121
聯通深藍卡都包含什麼app 瀏覽:264
如何判斷網路伺服器正常 瀏覽:651
路由器搭橋遠端伺服器地址是什麼 瀏覽:516
編譯動態庫時會連接依賴庫嗎 瀏覽:709
淘寶手機加密是隨機的嗎 瀏覽:674
解壓包子怎麼裝飾 瀏覽:587
四個數湊24演算法 瀏覽:677
哪一種不是vi編譯器的模式 瀏覽:171
xp在此處打開命令窗口 瀏覽:129
代碼編譯運行用什麼軟體 瀏覽:1000