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๋ ๊ทธ๋ณด๋ค ๋ ๋ง์ ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
'Programming > WinAPI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Windows API๋ก ์์ํด๋ณด๋ ์์ผ ํ๋ก๊ทธ๋๋ฐ (0) | 2017.04.10 |
---|---|
HANDLE ๊ตฌ์กฐ์ฒด์ Kernel Object๋ฅผ ์ด์ฉํ ์๋์ฐ ํ๋ก๊ทธ๋๋ฐ (0) | 2016.08.31 |
HANDLE ๊ตฌ์กฐ์ฒด์ Kernel Object (0) | 2016.08.29 |
SBCS, MBCS์ WBCS / ์ ๋์ฝ๋ ํ๋ก๊ทธ๋๋ฐ์ด ์ค์ํ ์ด์ (3) | 2016.07.19 |
Win32 API์ ์๋ฃํ (0) | 2016.06.14 |