@ David Schwartz sugeriu que é porque eles estão interceptando todo o acesso ao disco. Isso certamente parece credível para mim. Mas eu estou querendo saber se essa é a história toda. Eu estive bisbilhotando o driver EaseUS, empmntdrv.sys
. Algumas coisas a serem observadas:
-
Ele é carregado assim que eu inicio a interface do usuário, não particionando nada.
-
Os fóruns do EaseUS têm muitas postagens de pessoas reclamando que nenhuma partição é exibida quando ela é inicializada, e a resposta do material do suporte do EaseUS é: reinstale o driver. Isso me faz pensar que está sendo usado para realmente ler a tabela.
-
Trouxe as armas grandes: PE Explorer para desmontar o arquivo do driver. Principalmente grego para mim, claro, mas algumas coisas saltam fora. Primeiro, a tabela de símbolos mostra a lista de chamadas do sistema feitas para
ntoskrnel.exe
, e isso inclui mucking com links simbólicos:; Imports from ntoskrnl.exe extrn DbgPrint extrn ExAllocatePoolWithTag extrn ExFreePoolWithTag extrn IoBuildAsynchronousFsdRequest extrn IoBuildDeviceIoControlRequest extrn IoCreateDevice extrn IoCreateSymbolicLink extrn IoDeleteDevice extrn IoDeleteSymbolicLink extrn IoFreeIrp extrn IoFreeMdl extrn IoGetAttachedDeviceReference extrn IoGetDeviceObjectPointer extrn IofCallDriver extrn IofCompleteRequest extrn KeBugCheckEx extrn KeInitializeEvent extrn KeSetEvent extrn KeTickCount extrn KeWaitForSingleObject extrn MmMapLockedPagesSpecifyCache extrn MmUnlockPages extrn ObfDereferenceObject extrn ObfReferenceObject extrn RtlAnsiCharToUnicodeChar extrn RtlInitUnicodeString extrn RtlUnicodeStringToInteger extrn memcpy extrn memset
Note também que estas não são as rotinas de driver de filtro, elas são I / O de baixo nível. (Não
FltGetDiskDeviceObject
, em vezIoGetDeviceObjectPointer
. -
Ainda mais bisbilhotando encontrou algumas constantes que poderiam dar mais pistas. Como a maioria dos códigos compilados do Windows, há uma referência ao arquivo PDB, geralmente com o caminho no computador que o criou:
h: \ epm2.0 \ 01_projectarea \ 00_source \ epm2 \ mod.windiskaccessdriver \ windiskaccessdriver \ objfre_wxp_x86 \ i386 \ epmntdrv.pdb
Esse é provavelmente o nome do projeto do desenvolvedor: "win driver de acesso ao disco" Eu acho que eles precisam do driver para realmente ler a tabela de uma forma que seja útil para eles.
-
Depois, há essa constante, que realmente parece interessante:
\Device\Harddisk%u\Partition0
Isso pareceu interessante o suficiente para que eu rastreasse onde ele era referenciado no código desmontado, o que me levou aqui:
0001051E 68C6190100 push L000119C6 00010523 6A78 push 00000078h 00010525 50 push eax 00010526 E85BFFFFFF call SUB_L00010486 0001052B 83C420 add esp,00000020h 0001052E 85C0 test eax,eax 00010530 7404 jz L00010536 00010532 L00010532: 00010532 33C0 xor eax,eax 00010534 EB43 jmp L00010579 00010536 L00010536: 00010536 8D4584 lea eax,[ebp-7Ch] 00010539 50 push eax 0001053A 8D8574FFFFFF lea eax,[ebp-0000008Ch] 00010540 50 push eax 00010541 FF15941A0100 call [ntoskrnl.exe!RtlInitUnicodeString] 00010547 8D4580 lea eax,[ebp-80h] 0001054A 50 push eax 0001054B 8D857CFFFFFF lea eax,[ebp-00000084h] 00010551 50 push eax 00010552 56 push esi 00010553 8D8574FFFFFF lea eax,[ebp-0000008Ch] 00010559 50 push eax 0001055A FF15901A0100 call [ntoskrnl.exe!IoGetDeviceObjectPointer]
-
Então, que coisa mágica faz
IoGetDeviceObjectPointer
, que só está disponível em modo kernel, avisam quando você o chama em\Device\Harddisk0\Partition0
?De um poste antigo para comp.os.ms-windows.programmer. nt.kernel-mode :
If you get the pointer to \device\harddisk(n)\partition(n) using IoGetDeviceObjectPointer(), you will get a pointer to the partitions device object. If you want the physical disk device object, you need to get the pointer to \device\harddisk(n)\partition0.
Então o partition0 nos permite acessar o disco físico
E isso nos dá muitas métricas de desempenho e contadores que estão abaixo do nível lógico do disco.
-
Finalmente, tentando encontrar um horário que eu achei que poderia estar usando o driver. Fiz um "teste de superfície" do EaseUS e vejo estatísticas sobre o desempenho. Eles poderiam estar fazendo isso do nível do usuário, mas no Process Explorer, quando eu um instantâneo, de repente eu vi o
Device.mo
dll ativo: presumivelmente a parte do sistema que fala com o motorista.
Ainda não tenho certeza se essa é uma boa resposta para a pergunta. Mas foi divertido explorar, de qualquer maneira! Obrigado pela leitura.