diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index f2b083e6..24c63ef1 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -588,7 +588,7 @@ static inline FSP_FSCTL_TRANSACT_RSP *FspFsctlTransactConsumeResponse( return NextResponse <= ResponseBufEnd ? (FSP_FSCTL_TRANSACT_RSP *)NextResponse : 0; } -#if !defined(WINFSP_SYS_INTERNAL) +#if !defined(_KERNEL_MODE) FSP_API NTSTATUS FspFsctlCreateVolume(PWSTR DevicePath, const FSP_FSCTL_VOLUME_PARAMS *VolumeParams, PWCHAR VolumeNameBuf, SIZE_T VolumeNameSize, diff --git a/opt/fsext/inc/winfsp/fsext.h b/opt/fsext/inc/winfsp/fsext.h new file mode 100644 index 00000000..21bbe62a --- /dev/null +++ b/opt/fsext/inc/winfsp/fsext.h @@ -0,0 +1,60 @@ +/** + * @file winfsp/fsext.h + * + * @copyright 2015-2019 Bill Zissimopoulos + */ +/* + * This file is part of WinFsp. + * + * You can redistribute it and/or modify it under the terms of the GNU + * General Public License version 3 as published by the Free Software + * Foundation. + * + * Licensees holding a valid commercial license may use this software + * in accordance with the commercial license agreement provided in + * conjunction with the software. The terms and conditions of any such + * commercial license agreement shall govern, supersede, and render + * ineffective any application of the GPLv3 license to this software, + * notwithstanding of any reference thereto in the software or + * associated repository. + */ + +#ifndef WINFSP_FSEXT_H_INCLUDED +#define WINFSP_FSEXT_H_INCLUDED + +#if !defined(_KERNEL_MODE) +#error This file can only be included when compiling for kernel mode. +#endif + +#include + +#if defined(WINFSP_SYS_INTERNAL) +#define FSP_DDI __declspec(dllexport) +#else +#define FSP_DDI __declspec(dllimport) +#endif +#if !defined(FSP_DDI_DEF) +#define FSP_DDI_DEF(RetType, Name, ...) FSP_DDI RetType NTAPI Name ( __VA_ARGS__ ); +#endif + +typedef struct +{ + UINT32 Version; + /* in */ + UINT32 DeviceTransactCode; + UINT32 DeviceExtensionSize; + NTSTATUS (*DeviceInit)(PDEVICE_OBJECT DeviceObject); + VOID (*DeviceFini)(PDEVICE_OBJECT DeviceObject); + VOID (*DeviceExpirationRoutine)(PDEVICE_OBJECT DeviceObject, UINT64 ExpirationTime); + NTSTATUS (*DeviceTransact)(PIRP Irp, PDEVICE_OBJECT DeviceObject); + /* out */ + UINT32 DeviceExtensionOffset; +} FSP_FSEXT_PROVIDER; + +FSP_DDI_DEF(NTSTATUS, FspFsextRegisterProvider, FSP_FSEXT_PROVIDER *Provider) + +FSP_DDI_DEF(NTSTATUS, FspPosixMapSidToUid, PSID Sid, PUINT32 PUid) +FSP_DDI_DEF(NTSTATUS, FspPosixMapWindowsToPosixPathEx, PWSTR WindowsPath, char **PPosixPath, + BOOLEAN Translate) + +#endif diff --git a/opt/fsext/lib/winfsp-x64.lib b/opt/fsext/lib/winfsp-x64.lib new file mode 100644 index 00000000..dfc37e8b Binary files /dev/null and b/opt/fsext/lib/winfsp-x64.lib differ diff --git a/opt/fsext/lib/winfsp-x86.lib b/opt/fsext/lib/winfsp-x86.lib new file mode 100644 index 00000000..9e47ca09 Binary files /dev/null and b/opt/fsext/lib/winfsp-x86.lib differ diff --git a/opt/fsext/lib/winfsp.impdef b/opt/fsext/lib/winfsp.impdef new file mode 100644 index 00000000..de283148 --- /dev/null +++ b/opt/fsext/lib/winfsp.impdef @@ -0,0 +1,6 @@ +// tools\impdef.bat lib\winfsp.impdef lib\winfsp-x64.lib +// tools\impdef.bat lib\winfsp.impdef lib\winfsp-x86.lib + +#define FSP_DDI_DEF(RetType, Name, ...) __declspec(dllexport) RetType NTAPI Name ( __VA_ARGS__ ) {} +#include +#include diff --git a/tools/impdef.bat b/tools/impdef.bat new file mode 100644 index 00000000..60e13df5 --- /dev/null +++ b/tools/impdef.bat @@ -0,0 +1,44 @@ +@echo off + +setlocal +setlocal EnableDelayedExpansion + +if X%1==X goto usage +if X%2==X goto usage +set infile=%1 +set infile=%infile:/=\% +set outfile=%2 +set outfile=%outfile:/=\% +set workdir=!infile!.work +set workbase=!workdir!\%~n1 +set outarch=%~n2 +set outarch=%outarch:~-3% + +set arch=x64 +set cdef=/D_AMD64_ +if /i X%outarch%==Xx86 set arch=x86 +if /i X%outarch%==Xx86 set cdef=/D_X86_ + +call "%VS140COMNTOOLS%\..\..\VC\vcvarsall.bat" !arch! +set INCLUDE=%~dp0..\opt\fsext\inc;%~dp0..\inc;!WindowsSdkDir!Include\!WindowsSDKVersion!km\crt;!WindowsSdkDir!Include\!WindowsSDKVersion!km;!WindowsSdkDir!Include\!WindowsSDKVersion!km\shared;!INCLUDE! + +if exist !workdir! rmdir /s/q !workdir! +mkdir !workdir! + +type !infile! >>!workbase!.c +cl /LD /Fe!workbase!.sys /Fo!workbase!.obj !cdef! /D_KERNEL_MODE /wd4716 !workbase!.c +if errorlevel 1 goto fail + +copy !workbase!.lib !outfile! +if errorlevel 1 goto fail + +rmdir /s/q !workdir! + +exit /b 0 + +:fail +exit /b 1 + +:usage +echo usage: impdef.bat infile.impdef outfile.lib 1>&2 +exit /b 2