| delorie.com/archives/browse.cgi | search |
| DMARC-Filter: | OpenDMARC Filter v1.4.2 delorie.com 514BHfxH1390095 |
| Authentication-Results: | delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com |
| Authentication-Results: | delorie.com; spf=pass smtp.mailfrom=cygwin.com |
| DKIM-Filter: | OpenDKIM Filter v2.11.0 delorie.com 514BHfxH1390095 |
| Authentication-Results: | delorie.com; |
| dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=ZEFklhGH | |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| DKIM-Filter: | OpenDKIM Filter v2.11.0 sourceware.org 9A2BB3858C33 |
| DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; |
| s=default; t=1738667860; | |
| bh=CHRMOZKvp+YY6ivQWvi0c/TldvBM64s4NQdyyKJlLec=; | |
| h=Date:To:Subject:References:In-Reply-To:List-Id:List-Unsubscribe: | |
| List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: | |
| From; | |
| b=ZEFklhGHmqO6RabIe2Vc5Z/q4U9QtDAyzN4zY338A1XnscRhGCjr8F3P1nIfiZyue | |
| ijD9dyFWwDZRcjDiE0hOYN/NFmlKv7urCPHYXS5ZTvL1xlEjzSm0ijJHCNkIt708d0 | |
| qp/n2CM9slY/86YureRUsPxdXv2CzW6wds9DrAvc= | |
| X-Original-To: | cygwin AT cygwin DOT com |
| Delivered-To: | cygwin AT cygwin DOT com |
| DKIM-Filter: | OpenDKIM Filter v2.11.0 sourceware.org 0A3C8385841F |
| Date: | Tue, 4 Feb 2025 12:17:12 +0100 |
| To: | cygwin AT cygwin DOT com |
| Subject: | Re: [Ms-nfs41-client-devel] Fwd: Implementing mkfifo, mknod support |
| with NFS_SPECFILE_FIFO and NFS_SPECFILE_SOCK? | |
| Message-ID: | <Z6H3OH_AF6S1CRGm@calimero.vinschen.de> |
| Mail-Followup-To: | cygwin AT cygwin DOT com |
| References: | <CALXu0UdpgPgoZ_Vzwvh1DgYmgdKfs+k=NaLPm0JK3rAZANUEnA AT mail DOT gmail DOT com> |
| <CALXu0Ucd9fYhWRHZ_3a+JYjgV4_Q9cv-v_kCODcdicTEpw6Krw AT mail DOT gmail DOT com> | |
| <CAKAoaQm0C4YE+OkPMoUyn8TRj4D9F9tVGO-j7tg4m64Wa5MO5Q AT mail DOT gmail DOT com> | |
| <Z6H1F8KXVmQytZrM AT calimero DOT vinschen DOT de> | |
| MIME-Version: | 1.0 |
| In-Reply-To: | <Z6H1F8KXVmQytZrM@calimero.vinschen.de> |
| X-BeenThere: | cygwin AT cygwin DOT com |
| X-Mailman-Version: | 2.1.30 |
| List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
| List-Unsubscribe: | <https://cygwin.com/mailman/options/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe> | |
| List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
| List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
| From: | Corinna Vinschen via Cygwin <cygwin AT cygwin DOT com> |
| Reply-To: | cygwin AT cygwin DOT com |
| Cc: | Corinna Vinschen <corinna-cygwin AT cygwin DOT com> |
| Errors-To: | cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com |
| Sender: | "Cygwin" <cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com> |
On Feb 4 12:08, Corinna Vinschen via Cygwin wrote:
> $ cat > mk-dev-nfs.c <<EOF
> [...]
Copy/Paste error, try this one:
#include <stdio.h>
#include <windows.h>
#include <winternl.h>
typedef struct {
DWORD ReparseTag;
WORD ReparseDataLength;
WORD Reserved;
struct {
BYTE DataBuffer[1];
} GenericReparseBuffer;
struct {
ULONGLONG Type;
union {
struct {
ULONG Major;
ULONG Minor;
} Device;
WCHAR LnkBuffer[1];
};
} NfsReparseBuffer;
} MY_REPARSE_DATA_BUFFER, *MY_PREPARSE_DATA_BUFFER;
#define NFS_SPECFILE_LNK 0x00000000014B4E4CL
#define NFS_SPECFILE_CHR 0x0000000000524843L
#define NFS_SPECFILE_BLK 0x00000000004B4C42L
#define NFS_SPECFILE_FIFO 0x000000004F464946L
#define NFS_SPECFILE_SOCK 0x000000004B434F53L
int
main (int argc, char **argv)
{
HANDLE fh;
char buf[65536];
DWORD size_ret;
MY_PREPARSE_DATA_BUFFER rp;
if (argc < 3)
{
fprintf (stderr, "usage: %s <name> b|c|f|s [major] [minor]\n", argv[0]);
return 1;
}
fh = CreateFile (argv[1],
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_FLAG_BACKUP_SEMANTICS
| FILE_FLAG_OPEN_REPARSE_POINT,
NULL);
if (fh == INVALID_HANDLE_VALUE)
{
fprintf (stderr, "CreateFile: %d\n", GetLastError ());
return 1;
}
rp = (MY_PREPARSE_DATA_BUFFER) buf;
rp->ReparseTag = IO_REPARSE_TAG_NFS;
rp->ReparseDataLength = sizeof (ULONGLONG);
switch (argv[2][0])
{
case 'b':
case 'c':
if (argc != 5)
{
fprintf (stderr, "usage: %s <name> b|c|f|s [major] [minor]\n",
argv[0]);
return 1;
}
rp->ReparseDataLength += 2 * sizeof (ULONG);
rp->NfsReparseBuffer.Type = argv[2][0] == 'b' ?
NFS_SPECFILE_BLK
: NFS_SPECFILE_CHR;
rp->NfsReparseBuffer.Device.Major = strtoul (argv[3], NULL, 0);
rp->NfsReparseBuffer.Device.Minor = strtoul (argv[4], NULL, 0);
break;
case 'f':
rp->NfsReparseBuffer.Type = NFS_SPECFILE_FIFO;
break;
case 's':
rp->NfsReparseBuffer.Type = NFS_SPECFILE_SOCK;
break;
}
if (! DeviceIoControl (fh, FSCTL_SET_REPARSE_POINT,
(LPVOID) buf,
REPARSE_GUID_DATA_BUFFER_HEADER_SIZE
+ rp->ReparseDataLength,
NULL, 0, &size_ret, NULL))
{
fprintf (stderr, "DeviceIoControl: %d\n", GetLastError ());
CloseHandle (fh);
DeleteFile (argv[1]);
return 1;
}
CloseHandle (fh);
return 0;
}
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |