SetFileValidData and SMB, what's the trick?

I’m using the SetFileValidData call to quickly allocate a large region on disk prior to filling it with data. I add the SE_MANAGE_VOLUME_NAME priv to the process prior to opening any file handles and everything works great when I specify a local NTFS file path. But when I specify an SMB path, the SetFileValidData call fails with ERROR_PRIVILEGE_NOT_HELD. The SMB path refers to another Windows 10 machine and if I run the code locally on that machine it works as well. The documentation for SetFileValidData indicates support for SMB, but I’m wondering if there’s some kind special token/priv manipulation I need to do in order for this priv to pass from SMB client, to SMB server, and finally along to that local NTFS instance. One other data point, it works properly when I specify the SMB path of a local resource, but as soon as the SMB path points to a different machine, I get the error.

Any ideas?

-JT

Any ideas?

First thing I would do would be see where the error comes from (client or server). My bet would be the server and at that stage I’m guessing that all bets are off - you’d need to persuade the server to impersonate in the Set File Info Path which it probable doesn’t know how to.

I guess I should also say that I’m assuming that the thread calling the set info call has the required privileges. For obvious reasons you cannot rely on kernel mode giving you priviledge when you are running against a remote resources. Also that the file object is opened appropriately…