Code :: Blocksを使用して単純なカーネルモードドライバを書きましたが、エラー1275のためにロードできないようです私は64ビットマシンに32ビットのドライバをロードしようとしています。Windowsカーネルの開発 - サービスの開始に失敗しました:エラー1275
ddk(ドライバ開発キット)は32ビットのようです。私は64ビットドライバを見つけることができませんでした。そのため、ドライバを64ビットドライバとしてどのように再作成するかは全く考えていません。
私は窓8.1 64
これは、ドライバのコードで使用しています*:
#include "ddk/ntddk.h"
VOID __stdcall OnUnload(IN PDRIVER_OBJECT DriverObject)
{
DbgPrint("OnUnload called\n");
}
NTSTATUS __stdcall DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath)
{
DbgPrint("I loaded!\n");
theDriverObject->DriverUnload = OnUnload;
return STATUS_SUCCESS;
}
これは、負荷\アンロードコードです:
#include <stdio.h>
#include <windows.h>
#define false 0
#define true 1
int _util_unload_sysfile(char *driver)
{
char string[512] = "sc delete ";
strcat(string, driver); /* unsafe , fix later */
system(string);
return 1;
}
int _util_load_sysfile(char *theDriverName)
{
char aPath[1024];
char aCurrentDirectory[515];
SC_HANDLE sh = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!sh)
{
printf("Failed in OpenSCManager");
return false;
}
GetCurrentDirectory(512, aCurrentDirectory);
_snprintf(aPath, 1022, "%s\\%s.sys", aCurrentDirectory, theDriverName);
printf("Loading %s\n", aPath);
SC_HANDLE rh = CreateService(sh, theDriverName, theDriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, aPath, NULL, NULL, NULL, NULL, NULL);
if(!rh)
{
printf("Failed to create service: ");
if (GetLastError() == ERROR_SERVICE_EXISTS)
{
// service exists
printf("Service already exists\n");
rh = OpenService(sh, theDriverName, SERVICE_ALL_ACCESS);
if(!rh)
{
CloseServiceHandle(sh);
return false;
}
}
else
{
printf("Unknown error\n");
CloseServiceHandle(sh);
return false;
}
}
// start the drivers
else
{
printf("Starting driver\n");
if(0 == StartService(rh, 0, NULL))
{
printf("Failed to start service\n");
printf("Last error: %d\n", GetLastError());
// if(ERROR_SERVICE_ALREADY_RUNNING == GetLastError())
// {
// printf("Service already running\n");
// // no real problem
// }
// else
// {
// CloseServiceHandle(sh);
// CloseServiceHandle(rh);
// return false;
// }
}
else
{
printf("Service started\n");
}
CloseServiceHandle(sh);
CloseServiceHandle(rh);
}
return true;
}
が、これは出力されました:
C:\Users\...\Desktop>a.exe load driver
Loading C:\Users\...\Desktop\driver.sys
Starting driver
Failed to start service
Last error: 1275
WDK for Windows 7をインストールし、そのビルド環境のいずれかを使用してドライバをコンパイルしてみてください。 64ビットドライバを生成する環境があります。あなたのドライバにMAKEFILEとSOURCESファイルを作成する必要があります。 WDKに付属しているサンプルを調べて、対処方法を知ってください。または、このサンプル(私のもの)を見てください:https://jadro-windows.cz/download/hello.zip –