From: Pat LaVarre <p.lavarre@ieee.org>
To: linux-fsdevel@vger.kernel.org
Cc: linux_udf@hpesjro.fc.hp.com
Subject: Re: editable udf metadata
Date: 08 Oct 2003 11:51:51 -0600 [thread overview]
Message-ID: <1065635511.7602.38.camel@patehci2> (raw)
In-Reply-To: <1065631668.6625.48.camel@patehci2>
[-- Attachment #1: Type: text/plain, Size: 1518 bytes --]
> > > Do you mean to say you see the metadata ...
> >
> > I know I haven't yet found
> > a convenient printer of metadata for udf files.
Kindly offline I received the ...philips.com/udf/ link.
I wonder if that means people somewhere know how to extract just the
metadata of a single file from the udfct_1_0r2 tool.
The web trail I know to the udfct_1_0r2 tool is:
http://www.google.com/search?q=philips+udf+verifier
http://www.google.com/search?q=philips+udf+verifier&btnI=1
http://www.extra.research.philips.com/udf/
http://www.extra.research.philips.com/udf/download.html
I see udfct_1_0r2 describes itself as designed to work in Win 9X/ME.
I see compiling a wnaspi32.dll (e.g. via the wnaspi32.cpp for mingw gcc
attached) makes udfct_1_0r2 work in Win 2K/XP too.
I'm told Linux udfct_1_0r2 as yet works only on disk images ... such as
we create by default any time we substitute a loop device for a real
device. But I see that wnaspi32.dll I compiled rests on top of gccscsi,
which by design talks thru Linux /dev/sg, not just Win/ Dos/ MacOF, so I
wonder if we are close to seeing udfct_1_0r2 run in linux.
I hear udfct_1_0r2 dumps only all the metadata of a disk, never the
metadata of a single file.
I of course welcome any correction/ elaboration you have to offer.
Pat LaVarre
P.S. Google at this moment no longer requires us to remember to say
Verifier rather than Test. That is, to rediscover udfct_1_0r2 we now
can use the more concise link:
http://www.google.com/search?q=philips+udf+test
[-- Attachment #2: wnaspi32.cpp --]
[-- Type: text/x-c++, Size: 4590 bytes --]
/*
* wnaspi32.cpp
*
* This source file for Win 2K/XP exists to make:
*
* LoadLibrary("wnaspi32.dll");
*
* work enough like it did in Win 9X/ME to allow
* trivial apps to function.
*
* Our "wnaspi32.h" appears unattributed, unlicensed,
* and without copyright, precisely as it reached us
* via Google.
*
* msdn.microsoft.com probably documents what our
* history of pain has taught us of this interface.
*
* Bugs include:
*
* Misbehaviour above 2 GiB per CDB.
*
* Drive letter = ('C' + SRB_Target).
* No CloseHandle.
* CreateFile called til success, for each cdb sent to a drive letter.
*
* Auto sense data echod out stderr, never passed back.
* No check for unused for the fields not copied, e.g. SRB_SenseLen.
*
* x00 SC_HA_INQUIRY never becomes IOCTL_SCSI_GET_CAPABILITIES
* x02 SC_EXEC_SCSI_CMD never becomes IOCTL_SCSI_PASS_THROUGH_DIRECT
*
* x80 SS_INVALID_CMD includes x08 SC_GETSET_TIMEOUTS
* x80 SS_INVALID_CMD includes x07 SC_RESCAN_SCSI_BUS
* x80 SS_INVALID_CMD includes x06 SC_GET_DISK_INFO
* x80 SS_INVALID_CMD includes x05 SC_SET_HA_PARMS
* x80 SS_INVALID_CMD includes x04 SC_RESET_DEV
* x80 SS_INVALID_CMD includes x03 SC_ABORT_SRB
* x80 SS_INVALID_CMD includes x01 SC_GET_DEV_TYPE
*/
#include "windows.h"
#include "ntddscsi.hpp"
#include <stddef.h>
#include <stdio.h>
#include "gccscsi.h"
#include "wnaspi32.hpp"
#define TARGET_COUNT (1 << 5) /* enough for 'C' .. 'Z' and one host */
int devs[TARGET_COUNT];
extern "C" {
extern DWORD GetASPI32SupportInfo(void);
extern DWORD SendASPI32Command(LPSRB v);
}
__declspec(dllexport)
extern DWORD GetASPI32SupportInfo(void)
{
BYTE srbStatus = SS_NO_ADAPTERS; /* xE8 */
BYTE haCount = ('Z' - 'A' + 1);
srbStatus = SS_COMP; /* x01 */
return ((srbStatus << 8) | haCount);
}
static BYTE ha_inquiry(SRB_HAInquiry * shai)
{
WORD alignment_mask = (4 * Ki);
BYTE may_count_data = 0x01;
DWORD max_length = (64 * Ki);
shai->HA_Count = 1;
shai->HA_SCSI_ID = (TARGET_COUNT - 1);
memset(&shai->HA_ManagerId[0], '\0', sizeof shai->HA_ManagerId);
memset(&shai->HA_Identifier[0], '\0', sizeof shai->HA_Identifier);
memset(&shai->HA_Unique[0], '\0', sizeof shai->HA_Unique);
strncpy((char *) &shai->HA_ManagerId[0], "Wnaspi32.dll", sizeof shai->HA_ManagerId);
strncpy((char *) &shai->HA_Identifier[0], "Slow SPT (not SPTD)", sizeof shai->HA_Identifier);
* (WORD *) &shai->HA_Unique[0x00] = alignment_mask;
* (BYTE *) &shai->HA_Unique[0x02] = may_count_data;
* (BYTE *) &shai->HA_Unique[0x03] = TARGET_COUNT;
* (DWORD *) &shai->HA_Unique[0x04] = max_length;
return SS_COMP; /* x01 */
}
static BYTE exec_scsi_cmd(SRB_ExecSCSICmd * sesc)
{
BYTE SRB_Target = sesc->SRB_Target;
BYTE SRB_Lun = sesc->SRB_Lun;
int letter = ('C' + SRB_Target);
if (!(('A' <= letter) & (letter <= 'Z'))) return SS_NO_DEVICE; /* x82 */
if (SRB_Lun != 0x00) return SS_NO_DEVICE; /* x82 */
int dev = devs[SRB_Target];
if (dev == 0) {
char name[123] = "//./A:";
sprintf(&name[0], "\\\\.\\%c:", letter);
dev = sp_open(&name[0]);
}
if (dev == 0) return SS_NO_DEVICE; /* x82 */
char * cdbChars = (char *) &sesc->CDBByte[0];
int cdbLength = sesc->SRB_CDBLen;
char * inChars = (char *) sesc->SRB_BufPointer;
char * outChars = inChars;
int maxLength = (int) sesc->SRB_BufLen;
BYTE SRB_Flags = sesc->SRB_Flags;
BYTE SRB_Flags_In_Out = (SRB_Flags & (SRB_DIR_OUT|SRB_DIR_IN)); /* x18 */
if (maxLength == 0) {
outChars = inChars = NULL;
} else if (SRB_Flags_In_Out == SRB_DIR_IN) { /* x08 */
outChars = NULL;
} else if (SRB_Flags_In_Out == SRB_DIR_OUT) { /* x10 */
inChars = NULL;
} else {
return SS_INVALID_SRB; /* xE0 */
}
int rc = sp_say(dev, cdbChars, cdbLength, outChars, inChars, maxLength);
if (rc == 0) {
sesc->SRB_HaStat = HASTAT_OK; /* x00 */
sesc->SRB_TargStat = 0x00; /* good */
return SS_COMP; /* x01 */
}
if (0 < rc) {
sesc->SRB_HaStat = HASTAT_DO_DU; /* x12 */
sesc->SRB_TargStat = 0x00; /* good */
return SS_ERR; /* x04 */
}
sesc->SRB_HaStat = HASTAT_BUS_FREE; /* x13 */
sesc->SRB_TargStat = 0x00; /* good */
return SS_ERR; /* x04 */
}
__declspec(dllexport)
extern DWORD SendASPI32Command(LPSRB v)
{
BYTE srbStatus = SS_INVALID_CMD; /* x80 */
SRB_Abort * sa = (SRB_Abort *) v;
if (sa->SRB_HaId != 0) {
return SS_INVALID_HA;
}
switch (sa->SRB_Cmd) {
case SC_HA_INQUIRY: /* x00 */
srbStatus = ha_inquiry((SRB_HAInquiry *) v);
break;
case SC_EXEC_SCSI_CMD: /* x02 */
srbStatus = exec_scsi_cmd((SRB_ExecSCSICmd *) v);
break;
default:
break;
}
sa->SRB_Status = srbStatus;
return srbStatus;
}
/* end of file */
next prev parent reply other threads:[~2003-10-08 17:52 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-07 19:02 zeroes read back more often than appended Pat LaVarre
2003-10-07 20:54 ` Pat LaVarre
2003-10-08 3:49 ` Ben Fennema
2003-10-08 16:41 ` Pat LaVarre
2003-10-08 16:47 ` editable udf metadata Pat LaVarre
2003-10-08 17:51 ` Pat LaVarre [this message]
2003-10-08 18:09 ` big-endian udfct_1_0r2 Pat LaVarre
2003-10-08 18:30 ` Matthew Wilcox
[not found] ` <3F8472FE.9040403@lougher.demon.co.uk>
2003-10-08 19:49 ` Matthew Wilcox
2003-10-08 20:43 ` Phillip Lougher
2003-10-21 21:54 ` editable udf metadata Pat LaVarre
2003-10-21 23:17 ` Pat LaVarre
2003-10-23 16:06 ` Pat LaVarre
2003-10-24 21:40 ` Pat LaVarre
2003-10-22 8:15 ` same page access Mark B
2003-10-22 11:21 ` Matthew Wilcox
2003-10-22 17:09 ` Mark B
2003-10-22 17:10 ` Matthew Wilcox
2003-10-08 17:02 ` zeroes read back more often than appended Pat LaVarre
2003-10-08 17:06 ` toggling smp clears x86_mce_p4thermal of make xconfig Pat LaVarre
2003-10-08 17:21 ` zeroes read back more often than appended Pat LaVarre
2003-10-08 16:46 ` soft trace of read/write of drivers/block/loop.c Pat LaVarre
2003-10-08 20:32 ` zeroes read back more often than appended Pat LaVarre
2003-10-09 20:54 ` Pat LaVarre
2003-10-10 0:52 ` Pat LaVarre
2003-10-10 16:39 ` Pat LaVarre
2003-10-10 18:15 ` Pat LaVarre
2003-10-14 0:38 ` Pat LaVarre
2003-10-14 1:48 ` Pat LaVarre
2003-10-20 23:20 ` Pat LaVarre
2003-10-21 14:47 ` Pat LaVarre
2003-10-21 16:46 ` Pat LaVarre
2003-10-21 18:44 ` Pat LaVarre
2003-10-23 18:52 ` Pat LaVarre
2003-10-27 21:55 ` Pat LaVarre
-- strict thread matches above, loose matches on Subject: below --
2003-11-26 15:58 editable udf metadata Pat LaVarre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1065635511.7602.38.camel@patehci2 \
--to=p.lavarre@ieee.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux_udf@hpesjro.fc.hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox