feat(win32): hello, world driver
This commit is contained in:
parent
f7dfa7747e
commit
da34cfd17d
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -24,4 +24,7 @@ src/stpdfs-fuse
|
||||||
*.ko
|
*.ko
|
||||||
*.mod
|
*.mod
|
||||||
*.mod.*
|
*.mod.*
|
||||||
*.order
|
*.order
|
||||||
|
|
||||||
|
Debug/
|
||||||
|
.vs/
|
77
win32/StupidFS.inf
Normal file
77
win32/StupidFS.inf
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
;
|
||||||
|
; StupidFS.inf
|
||||||
|
;
|
||||||
|
|
||||||
|
[Version]
|
||||||
|
Signature="$WINDOWS NT$"
|
||||||
|
Class=System ; TODO: specify appropriate Class
|
||||||
|
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} ; TODO: specify appropriate ClassGuid
|
||||||
|
Provider=%ManufacturerName%
|
||||||
|
CatalogFile=StupidFS.cat
|
||||||
|
DriverVer= ; TODO: set DriverVer in stampinf property pages
|
||||||
|
PnpLockdown=1
|
||||||
|
|
||||||
|
[DestinationDirs]
|
||||||
|
DefaultDestDir = 12
|
||||||
|
StupidFS_Device_CoInstaller_CopyFiles = 11
|
||||||
|
|
||||||
|
[SourceDisksNames]
|
||||||
|
1 = %DiskName%,,,""
|
||||||
|
|
||||||
|
[SourceDisksFiles]
|
||||||
|
StupidFS.sys = 1,,
|
||||||
|
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames
|
||||||
|
|
||||||
|
;*****************************************
|
||||||
|
; Install Section
|
||||||
|
;*****************************************
|
||||||
|
|
||||||
|
[Manufacturer]
|
||||||
|
%ManufacturerName%=Standard,NT$ARCH$
|
||||||
|
|
||||||
|
[Standard.NT$ARCH$]
|
||||||
|
%StupidFS.DeviceDesc%=StupidFS_Device, Root\StupidFS ; TODO: edit hw-id
|
||||||
|
|
||||||
|
[StupidFS_Device.NT]
|
||||||
|
CopyFiles=Drivers_Dir
|
||||||
|
|
||||||
|
[Drivers_Dir]
|
||||||
|
StupidFS.sys
|
||||||
|
|
||||||
|
;-------------- Service installation
|
||||||
|
[StupidFS_Device.NT.Services]
|
||||||
|
AddService = StupidFS,%SPSVCINST_ASSOCSERVICE%, StupidFS_Service_Inst
|
||||||
|
|
||||||
|
; -------------- StupidFS driver install sections
|
||||||
|
[StupidFS_Service_Inst]
|
||||||
|
DisplayName = %StupidFS.SVCDESC%
|
||||||
|
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||||
|
StartType = 3 ; SERVICE_DEMAND_START
|
||||||
|
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||||
|
ServiceBinary = %12%\StupidFS.sys
|
||||||
|
|
||||||
|
;
|
||||||
|
;--- StupidFS_Device Coinstaller installation ------
|
||||||
|
;
|
||||||
|
|
||||||
|
[StupidFS_Device.NT.CoInstallers]
|
||||||
|
AddReg=StupidFS_Device_CoInstaller_AddReg
|
||||||
|
CopyFiles=StupidFS_Device_CoInstaller_CopyFiles
|
||||||
|
|
||||||
|
[StupidFS_Device_CoInstaller_AddReg]
|
||||||
|
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"
|
||||||
|
|
||||||
|
[StupidFS_Device_CoInstaller_CopyFiles]
|
||||||
|
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll
|
||||||
|
|
||||||
|
[StupidFS_Device.NT.Wdf]
|
||||||
|
KmdfService = StupidFS, StupidFS_wdfsect
|
||||||
|
[StupidFS_wdfsect]
|
||||||
|
KmdfLibraryVersion = $KMDFVERSION$
|
||||||
|
|
||||||
|
[Strings]
|
||||||
|
SPSVCINST_ASSOCSERVICE= 0x00000002
|
||||||
|
ManufacturerName="d0p1" ;TODO: Replace with your manufacturer name
|
||||||
|
DiskName = "StupidFS Installation Disk"
|
||||||
|
StupidFS.DeviceDesc = "StupidFS Device"
|
||||||
|
StupidFS.SVCDESC = "StupidFS Service"
|
35
win32/StupidFS.sln
Normal file
35
win32/StupidFS.sln
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.9.34728.123
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StupidFS", "StupidFS.vcxproj", "{3333B462-ACF5-4758-A0EF-CE5C57A2531F}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|ARM64 = Debug|ARM64
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|ARM64 = Release|ARM64
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|ARM64.Build.0 = Debug|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|ARM64.Deploy.0 = Debug|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Debug|x64.Deploy.0 = Debug|x64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|ARM64.ActiveCfg = Release|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|ARM64.Build.0 = Release|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|ARM64.Deploy.0 = Release|ARM64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3333B462-ACF5-4758-A0EF-CE5C57A2531F}.Release|x64.Deploy.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {318DCE2F-6713-4A0D-90D4-1C2837639079}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
119
win32/StupidFS.vcxproj
Normal file
119
win32/StupidFS.vcxproj
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|ARM64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|ARM64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>ARM64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{3333B462-ACF5-4758-A0EF-CE5C57A2531F}</ProjectGuid>
|
||||||
|
<TemplateGuid>{1bc93793-694f-48fe-9372-81e2b05556fd}</TemplateGuid>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<MinimumVisualStudioVersion>12.0</MinimumVisualStudioVersion>
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform Condition="'$(Platform)' == ''">x64</Platform>
|
||||||
|
<RootNamespace>StupidFS</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows10</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||||
|
<ConfigurationType>Driver</ConfigurationType>
|
||||||
|
<DriverType>KMDF</DriverType>
|
||||||
|
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||||
|
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows10</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||||
|
<ConfigurationType>Driver</ConfigurationType>
|
||||||
|
<DriverType>KMDF</DriverType>
|
||||||
|
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows10</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||||
|
<ConfigurationType>Driver</ConfigurationType>
|
||||||
|
<DriverType>KMDF</DriverType>
|
||||||
|
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows10</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||||
|
<ConfigurationType>Driver</ConfigurationType>
|
||||||
|
<DriverType>KMDF</DriverType>
|
||||||
|
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||||
|
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||||
|
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<DriverSign>
|
||||||
|
<FileDigestAlgorithm>sha256</FileDigestAlgorithm>
|
||||||
|
</DriverSign>
|
||||||
|
<ClCompile>
|
||||||
|
<WppEnabled>false</WppEnabled>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<DriverSign>
|
||||||
|
<FileDigestAlgorithm>sha256</FileDigestAlgorithm>
|
||||||
|
</DriverSign>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||||
|
<DriverSign>
|
||||||
|
<FileDigestAlgorithm>sha256</FileDigestAlgorithm>
|
||||||
|
</DriverSign>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||||
|
<DriverSign>
|
||||||
|
<FileDigestAlgorithm>sha256</FileDigestAlgorithm>
|
||||||
|
</DriverSign>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Inf Include="StupidFS.inf" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<FilesToPackage Include="$(TargetPath)" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="driver.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
31
win32/StupidFS.vcxproj.filters
Normal file
31
win32/StupidFS.vcxproj.filters
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Driver Files">
|
||||||
|
<UniqueIdentifier>{8E41214B-6785-4CFE-B992-037D68949A14}</UniqueIdentifier>
|
||||||
|
<Extensions>inf;inv;inx;mof;mc;</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Inf Include="StupidFS.inf">
|
||||||
|
<Filter>Driver Files</Filter>
|
||||||
|
</Inf>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="driver.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
45
win32/driver.c
Normal file
45
win32/driver.c
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#include <ntddk.h>
|
||||||
|
#include <wdf.h>
|
||||||
|
|
||||||
|
DRIVER_INITIALIZE DriverEntry;
|
||||||
|
|
||||||
|
PDEVICE_OBJECT StpdDiskFileSystemDeviceObject;
|
||||||
|
|
||||||
|
VOID
|
||||||
|
StpdUnload(_In_ PDRIVER_OBJECT DriverObject)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(DriverObject);
|
||||||
|
|
||||||
|
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "StupidFS: Driver unload\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
NTSTATUS
|
||||||
|
DriverEntry(
|
||||||
|
_In_ PDRIVER_OBJECT DriverObject,
|
||||||
|
_In_ PUNICODE_STRING RegistryPath
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UNICODE_STRING ustr;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(RegistryPath);
|
||||||
|
|
||||||
|
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "StupidFS: DriverEntry\n"));
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&ustr, L"\\Stpd");
|
||||||
|
status = IoCreateDevice(DriverObject, 0, &ustr,
|
||||||
|
FILE_DEVICE_DISK_FILE_SYSTEM, 0, FALSE,
|
||||||
|
&StpdDiskFileSystemDeviceObject);
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(status))
|
||||||
|
{
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#pragma prefast(push)
|
||||||
|
#pragma prefast(disable:28155, "these are all correct")
|
||||||
|
#pragma prefast(disable:28169, "these are all correct")
|
||||||
|
#pragma prefast(disable:28175, "this is a filesystem, touching FastIoDispatch is allowed")
|
||||||
|
DriverObject->DriverUnload = StpdUnload;
|
||||||
|
#pragma prefast(pop)
|
||||||
|
return status;
|
||||||
|
}
|
Loading…
Reference in a new issue