-
Notifications
You must be signed in to change notification settings - Fork 147
双缓冲部分的设计
hkx3upper edited this page May 29, 2022
·
21 revisions
单一缓冲时,授权进程读操作后,缓冲内是明文,此时非授权进程再读缓冲,也会读到明文,这样会导致数据泄露。
所以本课题使用双缓冲,授权进程和非授权进程分别使用明文缓冲和密文缓冲,两个缓冲之间互不干扰,相对独立。
如图2-1所示
双缓冲即使用原来的缓冲作为明文缓冲,新建的缓冲作为密文缓冲。主要涉及到密文缓冲的创建与销毁,以及密文缓冲与明文缓冲的同步问题。密文缓冲不允许下发非缓冲写请求到文件系统驱动,它的非缓冲读请求不解密,因而应用程序会显示密文。
缓冲是建立在FileObject->SectionObjectPointer结构体指针上的,如图2-2所示。
本课题在minifilter内的私有密文缓冲指针ShadowSectionObjectPointer的基础上建立密文缓冲,替换掉非授权进程原始的SectionObjectPointer指针;而授权进程仍使用文件系统的原始明文缓冲。
至于为什么使用这种实现方式,可以参考开发文档这一节。
密文缓冲的建立和销毁在FileObject.c中,非授权进程原始的SectionObjectPointer指针的替换在PostCreate中,Read中密文缓冲不解密,Write中密文缓冲不允许下发。
FileObjetc.c->PocInitShadowSectionObjectPointers