artiche / dokan

Automatically exported from code.google.com/p/dokan
0 stars 0 forks source link

DokanNet, MoveFile - newname parameter isn't correct #55

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. create a sample file in the root of the C drive
2. run DokanNetMirror in the samples folder of DokanNet, set a break point
in the MoveFile() method of DokanNetMirror
3. Navigate to the drive (n:\) and try to rename the sample file.
4. DokanNetMirror doesn't support rename operations, but when you trap on
the break point, you'll notice that the value for the filename parameter is
"\\sample.txt", but the value for the newname parameter is "\\".

What is the expected output? What do you see instead?
I'd expect to have the newname parameter be equal to the renamed file name.
Also, if the file is being moved from one folder to another, I'd expect the
newname parameter to reflect that.

What version of the product are you using? On what operating system?
I'm using DokanNet 0.2.1.1227 and dokan-0.4.0.1223 x64 on Windows Vista x64
with SP1. I am using .NET 3.5. This is reproducible in .NET 2.0

Please provide any additional information below.

Original issue reported on code.google.com by JoeKay...@gmail.com on 23 Jan 2009 at 5:26

GoogleCodeExporter commented 9 years ago
I looked into this more, and it does not seem to happen with this combination of
packages:
1) DokanNet 0.2.1.1227 (same)
2) .NET 3.5 (same)
3) Windows Vista 32-bit (different)
4) dokan-0.4.2.1238 x86 (different)

I will try to compile dokan 0.4.2 from source on 64-bit to see if this is due 
to the
version of the Dokan library or because of 32 vs 64 bit.

Original comment by JoeKay...@gmail.com on 23 Jan 2009 at 5:35

GoogleCodeExporter commented 9 years ago
I've been able to compile the dokan.sys driver to x64, but I can only seem to 
be able
to compile the other programs to x86 ( I get compile errors for x64 ). Would it 
be
possible to create an installer for 0.4.2 for x64? I'd really appreciate it.

Original comment by JoeKay...@gmail.com on 23 Jan 2009 at 6:14

GoogleCodeExporter commented 9 years ago
any progress on this ? 

Original comment by rickard....@gmail.com on 10 Mar 2009 at 6:05

GoogleCodeExporter commented 9 years ago
From what I can tell the bug is fixed in dokan-0.4.2 but there is no binary 
release
of 0.4.2 for x64. I have confirmed that it is fixed for 32-bit dokan 0.4.2. We 
just
need a release of 0.4.2 for x64.

Original comment by JoeKay...@gmail.com on 11 Mar 2009 at 1:58

GoogleCodeExporter commented 9 years ago
I just built 64bit version of driver from trunk and on Vista 64 it still has 
this 
problem. First parameter in my MoveFile method is correct, this is old file 
name, 
but second parameter which is supposed to have full path to new file has only 
path, 
without filename.
Btw, only driver has to be 64bit, everything else works fine in 32bit mode.

Original comment by sslav...@gmail.com on 12 Apr 2009 at 8:55

GoogleCodeExporter commented 9 years ago
Hey there.  I'm using the 32 bit version on a 64-bit system and am getting just 
"\" 
for the new filename as well... any updates to this?

Thanks,
Andrew

Original comment by whisl...@gmail.com on 15 Apr 2009 at 2:11

GoogleCodeExporter commented 9 years ago
I haven't seen any updates yet

Original comment by JoeKay...@gmail.com on 15 Apr 2009 at 2:14

GoogleCodeExporter commented 9 years ago
Hi,
There is no additional comments about this issue, nor the code changes so I had 
a 
look in code and I found what's wrong with it. 
Problem is in Dokan\setfile.c line 239. It uses SetFile->BufferOffset to get 
PFILE_RENAME_INFORMATION which has a new file name. But this offset is 
calculated in 
dokan.sys which is 64bit application and structures have different alignment 
then in 
32bit!
If you compile dokan.dll in 64bit mode and your application is also 64bit then 
it's 
all good.

Cheers,
Slavko.

Original comment by sslav...@gmail.com on 28 Apr 2009 at 4:30

GoogleCodeExporter commented 9 years ago
My app has to run in 32 bit mode on x64 because it uses a 32 bit third party 
dll.

I looked at the dokan.dll code and found that the problem is not exactly an 
alignment
problem, but only a datatype size problem.  Two of the structures in filinfo.h 
have
handles as elements, which, unlike the other data types used, are 32 bit or 64 
bit
depending for x86 and x64 respectively.

Since these handles are never actually accessed by the dll's code, I simply 
made a
version of the 32 bit dll for use with the 64 bit driver.  I substituted INT64 
for
the handles in those two structures (one is the PFILE_RENAME_INFORMATION 
structure
mentioned in the previous post).

Doing this allows the 32 bit dll to work with the 64 bit driver without any 
bugs that
I have found.  Specifically, rename / move works fine now.

Hope this helps someone else out there.

Original comment by MSaintOr...@gmail.com on 27 May 2009 at 5:03

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Can somebody please compile dokan.dll for x86 with this change (HANDLE types in
fileinfo.h changed to INT64, lines 341 and 349) and post here? PLEASE.

Original comment by cw85...@gmail.com on 14 Oct 2009 at 7:05

GoogleCodeExporter commented 9 years ago
I have compiled the dokan.dll fropm windows server 2008 r2 in x86 mode, but the 
dll is 
only 22k, the "normal" dokan dll is 29k.

When I try to use the new dokan.dll with DokanNet my program just quit without 
any 
message...

Compilation seems to be OK.

Original comment by fskor...@gmail.com on 19 Dec 2009 at 11:17