www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2025/02/04/06:17:41

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

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019