示例#1
0
/**
 * effects: install Vis on the fly.
 */
NTSTATUS NTAPI HvmSwallowBluepill()
{//SAME
	CCHAR cProcessorNumber;
	NTSTATUS Status, CallbackStatus;

	Print(("HelloWorld:HvmSwallowBluepill(): Going to subvert %d processor%s\n",
			 KeNumberProcessors, KeNumberProcessors == 1 ? "" : "s"));

	KeWaitForSingleObject (&g_HvmMutex, Executive, KernelMode, FALSE, NULL);

	for (cProcessorNumber = 0; cProcessorNumber < KeNumberProcessors; cProcessorNumber++) 
	{
		Print(("HelloWorld:HvmSwallowBluepill():Installing HelloWorld VT Root Manager on processor #%d\n", cProcessorNumber));

		Status = CmDeliverToProcessor(cProcessorNumber, CmSubvert, NULL, &CallbackStatus);

		if (!NT_SUCCESS (Status)) {
			Print(("HelloWorld:HvmSwallowBluepill(): CmDeliverToProcessor() failed with status 0x%08hX\n", Status));
			KeReleaseMutex (&g_HvmMutex, FALSE);

			HvmSpitOutBluepill ();

			return Status;
		}

		if (!NT_SUCCESS (CallbackStatus)) {
			Print(("HelloWorld:HvmSwallowBluepill(): HvmSubvertCpu() failed with status 0x%08hX\n", CallbackStatus));
			KeReleaseMutex (&g_HvmMutex, FALSE);

			HvmSpitOutBluepill ();

			return CallbackStatus;
		}
	}

	KeReleaseMutex (&g_HvmMutex, FALSE);

	if (KeNumberProcessors != g_uSubvertedCPUs) {
		HvmSpitOutBluepill ();
		return STATUS_UNSUCCESSFUL;
	}

	return STATUS_SUCCESS;
}
示例#2
0
文件: mybp.c 项目: aaa1616/Hypervisor
NTSTATUS DriverUnload(PDRIVER_OBJECT DriverObject)
{
	NTSTATUS status;
	status = HvmSpitOutBluepill();
	if (!NT_SUCCESS(status)) {
		Trace(("DriverUnload : HvmSplitOutBluepill() failed with status 0x%08hX\n", status));
	}

	MmShutdownManager();

	return STATUS_SUCCESS;
}
示例#3
0
/**
 * effects: Uninstall HelloWorld VMM Hypervisor
 */
NTSTATUS NTAPI MadDog_UninstallHypervisor()
{
	return HvmSpitOutBluepill();
}