sandbox_document_final.odt

Đo n 3 ki m tra quy n write c a handle truy n vào

This preview shows page 14 - 16 out of 18 pages.

Đo n 3: ki m tra quy n write c a handle truy n vào. ntStatus = CheckHandleTypeAndAccess(FileHandle, SB_FILE, FILE_WRITE_ACCESS); if (!NT_SUCCESS(ntStatus)) goto RET_OLD; Hàm CheckHandleTypeAndAccess() có nhi m v ki m tra m t s đi u ki n sau c a handle truy n vào (tham s c a hàm NtWriteFile): Có th t là handle c a file hay ko (n u là handle key, process hay gì đó khác thì lo i ra ế ngay) Handle có quy n ghi không? (T t nhiên đã g i NtWriteFile thì nó ph i có quy n ghi, ko thì lo i) Nói chung các hàm x lý handle sau này đ u nh v y. ư
Image of page 14

Subscribe to view the full document.

Đo n 4: Tìm ki m handle trong b ng MAP_HANDLE_ENTRY đ xác đ nh tr ng thái file t ế đó xác đ nh cách x lý phù h p. if ( (pHandle = FindHandle(pProcess->HandleTable, FileHandle, NULL, SB_FILE)) != NULL) { szPath = QueryPath(FileHandle); if (!szPath) goto RET_NTSTATUS; Symbol2Target(szPath); Short2Long(szPath); if (pHandle->hMap != NULL) { WRITE_IN_SANDBOX: ntStatus = ZwWriteFile(pHandle->hMap, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset, Key); bSandboxed = TRUE; goto RET_NTSTATUS; } else { // Chuy n h ng file vào Sandbox, bao g m chu n b môi tr ng (t o th m c) và ướ ườ ư copy file RedirectFilePath(szPath, pSes->SessionID); ntStatus = MakeFilePath(szPath, TRUE, pSes->SessionID); if (!NT_SUCCESS(ntStatus)) goto RET_NTSTATUS; // Mo file moi chuyen huong de lay handle pHandle->hMap = OpenMapFile(szPath, &pHandle->ReopenInfo, TRUE); if (pHandle->hMap == NULL) goto RET_NTSTATUS; goto WRITE_IN_SANDBOX; } } Tr c tiên là hàm FindHandle(), nó có tác d ng tìm trong b ng MAP_HANDLE_ENTRY ướ xem có ph n t nào trùng v i handle truy n vào ko. B ng MAP_HANDLE_ENTRY này đ c ta t kh i t o và qu n lý m i khi có file m i đ c m b ng NtCreateFile ho c ượ ượ NtOpenFile, cho nên n u ko tìm đ c handle trong b ng này thì ch c ch n file này đã ế ượ đ c m b ng m t cách khác. ượ Đo n code x lý đ ng sau: N u có hMap trong MAP_HANDLE_ENTRY tìm đ c thì t c là có file này trong b ế ượ riêng, v y l p t c g i NtWriteFile v i hMap. (Luôn u tiên b riêng tr c b g c mà) ư ướ N u ko có hMap thì sao? ế Vi c x lý tr ng h p này liên quan đ n m t qui t c ta đã nêu ra t đ u, đó là: do b ườ ế tài nguyên g c r t l n nên không th cung c p cho m i session m t b n copy hoàn ch nh c a b g c ngay t đ u, mà các session s dùng chung b tài nguyên g c. Khi m t session nào đó có hành vi thay đ i tài nguyên thì tài nguyên đó m i đ c copy ượ sang b riêng c a nó đ đ m b o b tài nguyên g c không b thay đ i. đo n code trên, n
Image of page 15
Image of page 16
  • Fall '19

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern