windows 执行任何操作都是通过调用API来实现的么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 执行任何操作都是通过调用API来实现的么相关的知识,希望对你有一定的参考价值。
说得具体点,我不太明白。最好能从windows的层次构架来解释一下,谢谢了
我觉得不一定全是。windows的应用程序的执行应该都是由API来完成的,包括普通的应用程序和系统的应用程序。但是驱动程序好像不是由API来完成的。使用DDK,开发驱动程序,是windows系统要依赖它,它比系统还底层。不过你问的是任何操作了,如果单是从应用程序的角度来看的话,全部都是通过API来完成的了。看一个基本的win32的应用程序吧!
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;include文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szClassName db 'MyClass',0
szCaption db 'My First Window',0
.data?
hInstance dd ?
hWinMain dd ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;窗口过程 ;窗口过程属于回调,回调由windows调用
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
local @hDc
pushad
mov eax,uMsg
;下面的分支就是你所有的操作都要在这里处理,相应的消息使用相应的API函数。
.if eax==WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
;****************************************************************************
.else
//如果相应某消息你不处理,可以使用DefWindowProc让windows自行处理
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;****************************************************************************
xor eax,eax
popad
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;*****************************************************************************
;注册窗口类
;*****************************************************************************
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW+1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;*****************************************************************************
;建立并显示窗口
;*****************************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,\
offset szCaption,WS_OVERLAPPEDWINDOW,\
100,100,600,400,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;*****************************************************************************
;消息循环
;*****************************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax==0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
上面的程序是我学win32汇编时的内容。理解了这个就会明白一些基本的知识了。 参考技术A 一般来说是的
一般widows可以看成层次结构的
应用
----
api
---------
驱动
---------------
硬件
也就是说你的程序一般是调用api来和硬件打交道,比如说你要打印东西 你就要调用打印相关的api函数,然后api去调用驱动程序,驱动程序去操作硬件。
但是,api是且仅是windows通过库的型式提供的一套函数而已,你自己也可以定义一套api出来。
而且自己开发一些设备的驱动程序当然也是可以的。(否则硬件厂商就该去找微软拼命了)
更有甚者你可以连驱动都抛掉直接去读写硬件地址(当然在某些版本的windows中低级地址是被保护的,要通过iopm替换等手段才能得到权限)。本回答被提问者采纳 参考技术B 不一定
使用用户模拟来调用Azure AD Microsoft API的Web API
我有asp.net核心3.1 Web API项目,需要调用Microsoft Azure API(例如代表其他用户的存储API(模拟)。
我相信这可以通过Azure应用注册来实现,然后通过首先获取交互式令牌,然后通过Microsoft.Identity.Client库静默获取令牌来为用户创建模拟,
- 但是我不想从API内使用任何交互式身份验证,如何从我的API中执行此操作。
- 什么是用于Microsoft.Identity.Client.NET库的Web API身份验证的ASP.NET Core 3.0友好版本
任何示例都将有所帮助...
答案
如果您的Web api受Azure AD保护,则可以代表流使用。 Here是有关调用Web API的Web API的方案。
另一答案
您可以通过MSAL代表流(OBO)来实现代表用户(服务到服务的调用)获取令牌,您可以使用MSAL 2.3 +从文档here中检查文档和代码段。] >
以上是关于windows 执行任何操作都是通过调用API来实现的么的主要内容,如果未能解决你的问题,请参考以下文章