PATCH: Arla Windows driver

Bo Brantén <[email protected]>
Newsgroups gmane.comp.file-systems.arla.general
Message-ID <[email protected]>
Hello,

as have discussed earlier the current Arla Windows driver is to be 
compiled with the Windows 2000 DDK and Visual C++ 6.0 that nobody has 
anymore so here is a patch to compile it with the latest DDK (ver 
3790.1830) or WDK (ver 6001.18001), it compiles both in 32-bit and 64-bit 
however I have not run the 64-bit version only checked that it passes the 
compiler. If using the DDK you also need my GNU ntifs.h but in the WDK 
Microsoft includes it.

Bo Branten

_______________________________________________
Arla-drinkers mailing list
[email protected]
https://lists.stacken.kth.se/mailman/listinfo/arla-drinkers
arla-nt.diff (text/plain, 8.6 KB)
diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\inc\nnpfs_locl.h c:\src\arla-0.37\nnpfs\winnt\inc\nnpfs_locl.h

--- c:\src\arla-0.37.orig\nnpfs\winnt\inc\nnpfs_locl.h	Sun Jun 13 17:07:06 2004

+++ c:\src\arla-0.37\nnpfs\winnt\inc\nnpfs_locl.h	Tue Apr 21 20:33:34 2009

@@ -35,7 +35,6 @@

 #define _NNPFS_NNPFS_LOCL_H

 

 #include <stdio.h>

-#include <ntddk.h>

 #include <ntifs.h>

 #include <stdarg.h>

 

@@ -178,7 +177,7 @@ struct nnpfs_node {

     /* XXX pointer instead of copy? */

     nnpfs_cred      writemapper;       /* creds of the last write mmap */

 

-    ETHREAD	    *lazy_writer;

+    void	    *lazy_writer;

 } NNPFS_FCB, nnpfs_node;

 

 /*

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\inc\nnpfs_type.h c:\src\arla-0.37\nnpfs\winnt\inc\nnpfs_type.h

--- c:\src\arla-0.37.orig\nnpfs\winnt\inc\nnpfs_type.h	Sat Sep 07 12:49:12 2002

+++ c:\src\arla-0.37\nnpfs\winnt\inc\nnpfs_type.h	Tue Apr 21 20:04:25 2009

@@ -35,7 +35,7 @@

 #ifndef __NNPFS_TYPE_H

 #define __NNPFS_TYPE_H

 

-#ifdef	_X86_

+#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)

 typedef unsigned char   u_char;

 typedef	char		int8_t;

 typedef	short		int16_t;

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\src\makefile c:\src\arla-0.37\nnpfs\winnt\src\makefile

--- c:\src\arla-0.37.orig\nnpfs\winnt\src\makefile	Sat Sep 07 12:49:16 2002

+++ c:\src\arla-0.37\nnpfs\winnt\src\makefile	Sat Aug 16 14:40:34 2008

@@ -1,18 +1,7 @@

 #

-# $Id: makefile,v 1.4 2002/09/07 10:49:16 lha Exp $

-#

 # DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source

 # file to this component.  This file merely indirects to the real make file

 # that is shared by all the driver components of the Windows NT DDK

 #

 

-# Autoconf....

-

-!IF EXIST(C:\ntddk\bin\makefile.def)

-!INCLUDE C:\ntddk\bin\makefile.def

-!ELSE

-!INCLUDE C:\ddk\bin\makefile.def

-!ENDIF

-

-install: obj/i386/nnpfs.sys

-	copy /b obj\i386\nnpfs.sys C:\winnt\system32\drivers\nnpfs.sys

+!INCLUDE $(NTMAKEENV)\makefile.def

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_dev.c c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_dev.c

--- c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_dev.c	Sun Jun 13 17:07:12 2004

+++ c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_dev.c	Tue Apr 21 19:59:24 2009

@@ -84,7 +84,7 @@ nnpfs_opcode_valid(char *buf, unsigned l

 			"nnpfs_opcode_valid: opcode %x, msg->size %x, len %x\n",

 			msg->opcode, msg->size, len);

 	if (msg->opcode >= NNPFS_MSG_COUNT

-	    || msg->opcode < 0

+	    || ((int32_t) msg->opcode) < 0

 	    || msg->size > NNPFS_MAX_MSG_SIZE) {

 	    nnpfs_debug(XDEBDEV, "nnpfs_opcode_valid: FALSE\n");

 	    return FALSE;

@@ -806,7 +806,7 @@ nnpfs_pioctl (nnpfs_channel *chan,

     char *path;

 

     if (args->insize > NNPFS_MSG_MAX_DATASIZE

-	|| args->insize < 0

+	|| ((int32_t) args->insize) < 0

 	||(u_int)

 	(&args->msg[args->insize + args->pathsize] - (char *)args) > inlength

 	|| args->outsize > *outlength) {

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_fastio.c c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_fastio.c

--- c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_fastio.c	Tue Jul 01 16:12:14 2003

+++ c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_fastio.c	Tue Apr 21 20:25:53 2009

@@ -427,7 +427,7 @@ BOOLEAN

 nnpfs_lazywrite_acq(void *context, BOOLEAN waitp)

 {

     nnpfs_node *node = context;

-    ETHREAD *current_thread = PsGetCurrentThread();

+    void *current_thread = PsGetCurrentThread();

 

     nnpfs_debug(XDEBVNOPS, "nnpfs_lazywrite_acq(%X) wait %x\n",

 		node, waitp);

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_vops.c c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_vops.c

--- c:\src\arla-0.37.orig\nnpfs\winnt\src\nnpfs_vops.c	Tue Jul 01 16:21:50 2003

+++ c:\src\arla-0.37\nnpfs\winnt\src\nnpfs_vops.c	Tue Apr 21 20:41:12 2009

@@ -496,7 +496,7 @@ nnpfs_new_entry(nnpfs_node *dir,

     if (options & FILE_DIRECTORY_FILE

 	&& options & FILE_NON_DIRECTORY_FILE)

 	return STATUS_INVALID_PARAMETER;

-    if (options & (FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE) == 0)

+    if ((options & (FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE)) == 0)

 	return STATUS_INVALID_PARAMETER;

 	    

     if (options & FILE_DIRECTORY_FILE) {

@@ -791,7 +791,7 @@ nnpfs_path_winify(char *path) {

 	if (*p == '/')

 	    *p = '\\';

 

-    len = p - path;

+    len = ((int)(p - path));

 

     /* XXX this mapping should be in the registry */

     /* translate /afs to <nothing> */

@@ -2102,16 +2102,16 @@ nnpfs_fileinfo_all(PIRP irp, nnpfs_node 

     if (!NT_SUCCESS(status))

 	return status;

 

-    len = buflen - ((char *)position_buf - (char *)all_buf);

-    *size = (char *)position_buf - (char *)all_buf;

+    len = buflen - ((int)((char *)position_buf - (char *)all_buf));

+    *size = ((int)((char *)position_buf - (char *)all_buf));

     status = nnpfs_fileinfo_position(irp, node, position_buf, len, &local_size);

     if (!NT_SUCCESS(status))

 	return status;

 

     /* access, mode, alignment are filled in by object manager */

 

-    len = buflen - ((char *)name_buf - (char *)all_buf);

-    *size = (char *)name_buf - (char *)all_buf;

+    len = buflen - ((int)((char *)name_buf - (char *)all_buf));

+    *size = ((int)((char *)name_buf - (char *)all_buf));

     status = nnpfs_fileinfo_name(irp, node, name_buf, len, &local_size);

     *size += local_size;

     

@@ -2461,7 +2461,7 @@ long nnpfs_efilter(EXCEPTION_POINTERS *e

     ecode = e->ExceptionRecord->ExceptionCode;

     

     if ((ecode == STATUS_IN_PAGE_ERROR) && (e->ExceptionRecord->NumberParameters >= 3)) {

-	ecode = e->ExceptionRecord->ExceptionInformation[2];

+	ecode = ((NTSTATUS)e->ExceptionRecord->ExceptionInformation[2]);

     }

 

     if (!(FsRtlIsNtstatusExpected(ecode))) {

@@ -2715,14 +2715,18 @@ nnpfs_dirctl (PDEVICE_OBJECT device, PIR

     NTSTATUS			status = STATUS_SUCCESS;

     unsigned char		*buf = NULL;

     nnpfs_readdir_arg             arg;

+#ifdef _GNU_NTIFS_

     EXTENDED_IO_STACK_LOCATION	*eio_stack;

+#endif

     FILE_OBJECT			*file;

     nnpfs_ccb			*ccb = NULL;

     struct nnpfs_node		*node = NULL;

     

     io_stack = IoGetCurrentIrpStackLocation(irp);

     ASSERT(io_stack);

+#ifdef _GNU_NTIFS_

     eio_stack = (EXTENDED_IO_STACK_LOCATION *) io_stack;

+#endif

     irp->IoStatus.Information = 0;

 

     file = io_stack->FileObject;

@@ -2734,12 +2738,21 @@ nnpfs_dirctl (PDEVICE_OBJECT device, PIR

     try {

 	switch (io_stack->MinorFunction) {

 	case IRP_MN_QUERY_DIRECTORY:

+#ifdef _GNU_NTIFS_

 	    buflen = eio_stack->Parameters.QueryDirectory.Length;

 	    pattern = eio_stack->Parameters.QueryDirectory.FileName;

 	    infoclass =

 		eio_stack->Parameters.QueryDirectory.FileInformationClass;

 	    fileindex = eio_stack->Parameters.QueryDirectory.FileIndex;

 	    flags = eio_stack->Flags;

+#else

+	    buflen = io_stack->Parameters.QueryDirectory.Length;

+	    pattern = io_stack->Parameters.QueryDirectory.FileName;

+	    infoclass =

+		io_stack->Parameters.QueryDirectory.FileInformationClass;

+	    fileindex = io_stack->Parameters.QueryDirectory.FileIndex;

+	    flags = io_stack->Flags;

+#endif

 	    

 	    nnpfs_debug(XDEBVNOPS, "nnpfs_dirctl: "

 			"buflen: %d File_Info: %d flags: %x\n",

@@ -3242,10 +3255,18 @@ FSD_WRAPPER(nnpfs_fscontrol, nnpfs_fsd_f

 NTSTATUS 

 nnpfs_fscontrol (PDEVICE_OBJECT device, PIRP irp)

 { 

+#ifdef _GNU_NTIFS_

     EXTENDED_IO_STACK_LOCATION *io_stack;

+#else

+	IO_STACK_LOCATION *io_stack;

+#endif

     NTSTATUS status = STATUS_NOT_IMPLEMENTED;

 

+#ifdef _GNU_NTIFS_

     io_stack = (PEXTENDED_IO_STACK_LOCATION)IoGetCurrentIrpStackLocation(irp);

+#else

+	io_stack = IoGetCurrentIrpStackLocation(irp);

+#endif

     ASSERT(io_stack);

 

     switch (io_stack->MinorFunction) {

diff -uprN c:\src\arla-0.37.orig\nnpfs\winnt\src\sources c:\src\arla-0.37\nnpfs\winnt\src\sources

--- c:\src\arla-0.37.orig\nnpfs\winnt\src\sources	Tue Oct 29 18:54:28 2002

+++ c:\src\arla-0.37\nnpfs\winnt\src\sources	Tue Apr 21 19:51:05 2009

@@ -27,7 +27,7 @@ TARGETTYPE=DRIVER

 #

 # NOTE: The "fsdk\inc" refers to the Microsoft supplied Installable File Systems

 #       Developers Kit.

-INCLUDES=$(SRC)\inc;C:\ntddk\inc;C:\ntddk\inc\ddk;C:\ddk\inc;C:\fsdk\inc-40;$(SRC)\..\include;$(SRC)\..\..\lib\bufdir

+INCLUDES=..\inc;C:\ntddk\inc;C:\ntddk\inc\ddk;C:\ddk\inc;C:\fsdk\inc-40;..\..\include;..\..\..\lib\bufdir

 

 # The SOURCES variable is defined by the developer.  It is a list of all the

 # source files for this component.  Each source file should be on a separate
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.