Windows API ์™€์˜ ๋งŒ๋‚จ

๋ฐ˜์‘ํ˜•

์˜ค๋Š˜์€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, Windows API์— ๋Œ€ํ•œ ํฌ์ŠคํŒ…์„ ํ•˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.


์—ฌํƒœ๊นŒ์ง€ ์ €๋Š” Linux์™€ ์นœ์ˆ™ํ•ด์˜ค๋ฉด์„œ, Windows๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ํŽธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•™๊ต ๊ณผ์ œ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์—…๋ฌด ๋“ฑ์„ ๋ณด๋‹ค๋ณด๋ฉด, Windows๋Š” ํ”ผํ•  ์ˆ˜ ์—†๋Š” ์กด์žฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ Windows Kernel ์ชฝ์—๋„ ๊ด€์‹ฌ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


Windows API๋Š” ์ œ๊ฐ€ C ์–ธ์–ด๋ฅผ ๋ฐฐ์› ์„ ๋•Œ๋งŒํ•ด๋„ ์•„์ง ํ•œ์ฐฝ ๋ชฐ๋ž๋˜ ์‹œ์Šคํ…œ์ด์˜€์Šต๋‹ˆ๋‹ค. ์ด Windows API๋ฅผ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์€ GDB๋ฅผ ์‚ฌ์šฉํ•˜๋˜ Linux์˜ ๋””๋ฒ„๊ฑฐ๊ฐ€ Windows์—์„œ๋Š” OllyDbg๋‚˜ Immunity Debugger๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋ถ€ํ„ฐ Unix๋‚˜ Linux์™€ ๋‹ฌ๋ฆฌ Windows ์—๋Š” ํŠน๋ณ„ํ•œ API ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. 


์‚ฌ์‹ค Linux๋Š” ์ปค๋„ ์†Œ์Šค๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์–ด, ๊ตณ์ด ์–ธ์–ด์ ์œผ๋กœ ๊ฑด๋“ค์ด์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Windows๋Š” ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ Kernel์— ์ ‘๊ทผํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ ๊ณ ๋ฏผํ•˜๋‹ค Windows API๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋„ ํ•œ ๊ณ„๊ธฐ์˜€์Šต๋‹ˆ๋‹ค.



API....?

API๋ผ๋Š” ์šฉ์–ด๋ฅผ ์ฒ˜์Œ ๋“ค์œผ์‹  ๋ถ„๋“ค์ด ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. API๋Š” Application Programming Interface์˜ ์•ฝ์ž๋กœ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„์Šทํ•˜ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ฐœ๋…์€ ์ „ํ˜€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ง‘ํ•ฉ์œผ๋กœ ๋ณด์ž๋ฉด, API โŠ‚ Library ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. API๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์–ด๋–ค ๊ทœ์น™์„ ๋งŒ๋“ค๊ณ , ๊ทธ๊ฒƒ์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. OS์™€ ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์˜์‚ฌ์†Œํ†ต์„ ์œ„ํ•ด Shell์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์šด์˜์ฒด์ œ์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด ํ†ต์‹ ์—๋Š” API๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด์ง€์š”.



Windows API

Windows API๋Š” Microsoft์˜ Windows์—์„œ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Windows ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœํ•  ๋•Œ, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Windows ์šด์˜์ฒด์ œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. API๋Š” ์œ„์—์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ทธ ๊ฐœ๋…์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. API๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•œ ์ˆ˜๋‹จ์œผ๋กœ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์ •ํ•ด๋†“์€ ๊ทœ์น™์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์šฐ๋‹ค๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, Windows API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Keyboard, Mouse ๋“ฑ ์ž…๋ ฅ ์žฅ์น˜ ์ œ์–ด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, OS ๋‚ด์— ์ปค๋„ ๋ถ€๋ถ„, ํ”„๋กœ์„ธ์Šค ๋ถ€๋ถ„ ๋“ฑ์˜ ์‹œ์Šคํ…œ ์ œ์–ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์˜ API๋„ ๋งŒ๋‚  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 


Windows API๋Š” Windows Kernel์—์„œ ํ•ต์‹ฌ ๋ชจ๋“ˆ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ํžˆ ์šด์˜์ฒด์ œ์˜ ์ปค๋„์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. Micro-Kernel๊ณผ Monolithic kernel๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, Windows๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„์€ Micro-Kernel์— ๊ฐ€๊น๊ณ , UNIX์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋„์€ Monolitic-Kernel์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•œ, Linux๋Š” Micro-Kernel๊ณผ Monolithic kernel์˜ ์ค‘๊ฐ„ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค. Micro-kernel๊ณผ Monolithic kernel์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.




์œ„์— ๋ณด์ด๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ, ๋ชจ๋†€๋ฆฌํ‹ฑ ์ปค๋„์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.. ์šด์˜์ฒด์ œ์—๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ์™€ ์ปค๋„ ๋ชจ๋“œ์˜ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ๋ชจ๋†€๋ฆฌํ‹ฑ ์ปค๋„์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค์ง ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋งŒ ์ปค๋„์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ. ์ปค๋„์ด ํ•˜๋“œ์›จ์–ด์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ, ํ”„๋กœ์„ธ์Šค, ๋“œ๋ผ์ด๋ฒ„, System Call ๊นŒ์ง€ ๋ชจ๋‘ ๊ด€์žฅํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ๋ชจ๋†€๋ฆฌํ‹ฑ ์ปค๋„์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์šด์˜์ฒด์ œ๋กœ UNIX ์šด์˜์ฒด์ œ๊ฐ€ ์ด๋Ÿฐ ์ปค๋„ ๊ตฌ์กฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด์„œ Kernel ์ „๋ถ€๋ฅผ ๊ต์ฒดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.




์œ„์— ์žˆ๋Š” ์‚ฌ์ง„์€ ๋งˆ์ดํฌ๋กœ ์ปค๋„์˜ ๊ตฌ์กฐ์ด์ž Windows NT(New Technology, 2000) ์ปค๋„์˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ชจ๋†€๋ฆฌํ‹ฑ ์ปค๋„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์‚ฌ์šฉ์ž ๋ชจ๋“œ์™€ ์ปค๋„ ๋ชจ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ํ•˜๋“œ์›จ์–ด ๋“œ๋ผ์ด๋ฒ„ ๊ด€๋ฆฌ ๋“ฑ์„ ์ง์ ‘ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ๋„ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ๊ฐ–์ถฐ์ ธ ์žˆ์–ด ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜ ํ•˜๋‚˜๋งŒ์œผ๋กœ, ์—ฌ๋Ÿฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ฝ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์ปค๋„์—์„œ๋Š” IPC ๋“ฑ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋ฅผ ์ „๋ถ€ ์ปค๋„์—์„œ ๋–ผ์–ด๋‚ธ ๊ฒƒ์„ ๋งˆ์ดํฌ๋กœ ์ปค๋„ ๊ตฌ์กฐ๋ผ ํ•ฉ๋‹ˆ๋‹ค. 


์ด๋Ÿฐ ์ปค๋„ ๊ตฌ์กฐ๋ฅผ ๋ณดํ†ต ๋ชจ๋“ˆ์‹ ์ปค๋„์˜ ๊ตฌ์กฐ๋ผ๊ณ ๋„ ์–˜๊ธฐํ•ฉ๋‹ˆ๋‹ค. Windows๋Š” UNIX์™€ ๋‹ค๋ฅด๊ฒŒ, ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ ๋“ฑ๋„ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค์น˜/์‚ญ์ œ ๋งŒ์œผ๋กœ ์ž์œ ๋กญ๊ฒŒ ๋ถ„ํ•ด/์กฐ๋ฆฝ์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์œผ๋กœ Windows ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 


Windows ์šด์˜์ฒด์ œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ชจ๋“ˆ์€ User, GDI, Kernel ์ž…๋‹ˆ๋‹ค. ์œ„ ์‚ฌ์ง„์—์„œ ๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ Executive ๋‚ด๋ถ€์—๋Š” GDI ๋ชจ๋“ˆ๊ณผ Window Manager (User) ๋ชจ๋“ˆ์ด ์žˆ๊ณ , ๋‚˜๋จธ์ง€๋Š” Kernel ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์‚ฌ์ง„์€ Windows 2000 ๋ชจ์Šต์ด๋ผ, ์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์ง€๊ธˆ์€ ๋งŽ์ด ๋‹ฌ๋ผ์กŒ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋‚˜์˜จ Windows 10 Kernel์—๋Š” Subsystem์— ๊ธฐ์กด์— ์žˆ๋Š” OS/2์™€ ํ•จ๊ป˜ Ubuntu Linux๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค.



ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

Windows API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์—๋Š” Visual C / C++, Visual C#, Visual Basic.NET์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง๊นŒ์ง€ ์ €๋Š” Visual C++๋งŒ์„ ๊ฐ€์ง€๊ณ , API์— ์ ‘๊ทผํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋” ๋งŽ์€ API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด C#์ด๋‚˜ VB.NET์„ ์ถ”์ฒœํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. VB.NET์–ธ์–ด๋Š” ๊ธฐ์กด VB 6.0์—์„œ .NET Framework๊ฐ€ ๊ฐœ๋ฐœ๋œ 2003~2004๋…„ ๊ฒฝ์— VB.NET์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. 


#include <Windows.h>
INT APIENTRY WinMain(HINSTANCE hins, HINSTANCE hPrev, LPSTR cmd, INT nShow)
{
	MessageBoxA(NULL, "Hello WinAPI ~!", "Hello !", MB_DEFBUTTON1);
	return 0;
}



์œ„ ์ฝ”๋“œ์™€ ํ™”๋ฉด์€ Windows API๋ฅผ Visual C++ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. C์–ธ์–ด์—์„œ ์ฒ˜์Œ์— printf๋ฅผ ์จ์„œ Hello World๋ฅผ ์“ด๋‹ค๋Š” ๋Š๋‚Œ์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


C์–ธ์–ด๋‚˜ C++ ์–ธ์–ด๋กœ, Windows APIํ•  ๋•Œ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณต๋˜๋Š” ํ˜•์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜‘๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.


๊ธฐ๋ณธ์ ์ธ Windows API๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” ์•„๋ž˜์˜ ํŒŒ์ผ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


#include <Windows.h>


Windows.h ํŒŒ์ผ์— ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํ˜•์‹์—๋Š” ํ‘œ์ค€ C๋‚˜ C++ ์–ธ์–ด์— ์—†๋Š” ๋งŽ์€ ์ž๋ฃŒํ˜•์‹๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์ฐจ์ฐจ ์ œ๊ฐ€ ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ ํฌ์ŠคํŒ…ํ•  ๊ฒƒ์ด์ง€๋งŒ, ๋ง›๋ณด๊ธฐ๋ฅผ ์œ„ํ•ด์„œ ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด, minwindef.h ํ—ค๋” ํŒŒ์ผ์„ ์‚ดํŽด๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (Visual Studio 2015 Update 2 ๊ธฐ์ค€)


์—ฌ๊ธฐ๊นŒ์ง€, Windows API์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ถ€๋ถ„์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ์ €์ฒ˜๋Ÿผ Linux๋ฅผ ์‚ฌ์šฉํ•˜์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, Windows API ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์–ด์ฐŒ๋ณด๋ฉด, ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ™์•„ ๋ณด์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ ๋ถ€๋ถ„๋„ ํฌํ•จ์€ ๋˜์ง€๋งŒ,. Windows๋Š” ๊ทธ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋” ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments