Hi Matthieu:
We have finished our investigation regarding your question on how to query the 
features offered by a printer driver.
There is no API available to query printer features remotely. To query the 
features of a printer, the driver must be installed locally. 

The PrintCapabilities architecture is the only way to get all of the features 
and options supported by a printer.
 After the driver is installed, to query the full print capabilities for a 
printer, you should use the PTGetPrintCapabilities 
(http://msdn.microsoft.com/en-us/library/dd162881.aspx) method. 
That will return the print capabilities in the XML format specified in the 
Print Schema (http://www.microsoft.com/whdc/xps/printschema.mspx) . 
You can also use the PTConvertDevModeToPrintTicket 
(http://msdn.microsoft.com/en-us/library/dd162879.aspx) function to instruct a 
printer driver to convert a DEVMODE into an XML print ticket whose format is 
also specified in the Print Schema. 
You can also use the slightly simpler DeviceCapabilities 
(http://msdn.microsoft.com/en-us/library/dd183552.aspx) method to get lists of 
bin names, resolutions, paper sizes, etc., which may make the feature option 
pairs more human-readable.

Please let me know if it answers your question. If it does, I'll consider this 
issue resolved.

Regards,
Obaid Farooqi
Sr. Support Escalation Engineer | Microsoft

-----Original Message-----
From: Matthieu Patou [mailto:[email protected]] 
Sent: Saturday, February 27, 2010 3:52 AM
To: Obaid Farooqi
Cc: [email protected]; [email protected]; MSSolve Case Email
Subject: Re: [REG: 110021555999716 ] Spoolss questions

On 27/02/2010 04:16, Obaid Farooqi wrote:
> Hi Metthieu:
> We have finished our investigation on your first question. I'll update you as 
> soon as I have answers for your remaining questions. Please see below for the 
> answer. I have arranged it in Question/Answer format for clarity.
>
> Question:
> Page 372 it is stated that:
> "FeatureOptionPairs (variable): Must be a concatenation of an even number of 
> zero-terminated ASCII strings, terminated by an additional zero character. 
> Each pair of two consecutive strings specifies a print schema feature and the 
> currently selected option."
>
> Which options should be included in this field ?
> What is the signification of the options, for instance the dump of the 
> Generic / Text only driver give the following array:
>                               options: ARRAY(10)
>                                   [0]                      : 'InputBin'
>                                   [1]                      : 'Option1'
>                                   [2]                      : 'RESDLL'
>                                   [3]                      : 'UniresDLL'
>                                   [4]                      : 'Resolution'
>                                   [5]                      : 'Option1'
>                                   [6]                      : 'PaperSize'
>                                   [7]                      : 'LETTER'
>                                   [8]                      : 'Orientation'
>                                   [9]                      : 'PORTRAIT'
>
> For PaperSize and Orientation it's quite obvious but for InputBin RESDLL or 
> Resolution it's already not
>
> Answer:
> Windows behavior<88>  of MS-RPRN will be modified in a future version of the 
> document. The changes are detailed below. I am also attaching a PDF version 
> that contains full<88>  with modifications highlighted with strikethrough and 
> color.
>
> First paragraph of<88>  Section 2.2.2.1.4
> --------------------------------------------------
>
> Current verbiage: This is the JTEXP structure, which contains the _DEVMODE 
> dmDriverExtraData defined by Windows to hold print ticket selection 
> information
>
> Future verbiage: This is the JTEXP structure, which contains the _DEVMODE 
> dmDriverExtraData defined by Windows to hold feature selection information
>
> Definition of FeatureOptionPairs (variable)
> ---------------------------------------------------
> Current Verbiage: Must be a concatenation of an even number of 
> zero-terminated ASCII strings, terminated by an additional zero character. 
> Each pair of two consecutive strings specifies a print schema feature and the 
> currently selected option.
>
> Future verbiage: Must be a concatenation of an even number of zero-terminated 
> ASCII strings, terminated by an additional zero character. Each pair of two 
> consecutive strings specifies a vendor-defined feature and the currently 
> selected option for that feature. Each printer driver provides its own list 
> of features and possible option values for each feature.
>
> Please let me know if it answers your question. If yes, I'll consider this 
> issue resolved.
So far it seems, is there a standard api to get the list of printer 
feature ?
Matthieu.
>
> Regards,
> Obaid Farooqi
> Sr. Support Escalation Engineer | Microsoft
>
> -----Original Message-----
> From: Matthieu Patou [mailto:[email protected]]
> Sent: Sunday, February 14, 2010 3:26 PM
> To: Interoperability Documentation Help; [email protected]; 
> [email protected]
> Subject: Spoolss questions
>
> Hello Dochelp Team,
>
> I've got a few questions regarding the MS-RPRN documentation, here they are:
>
> 1) Page 372 it is stated that :
> "FeatureOptionPairs (variable): Must be a concatenation of an even number of 
> zero-terminated ASCII strings, terminated by an additional zero character. 
> Each pair of two consecutive strings specifies a print schema feature and the 
> currently selected option."
>
> Which options should be included in this field ?
> What is the signification of the options, for instance the dump of the 
> Generic / Text only driver give the following array:
>                               options: ARRAY(10)
>                                   [0]                      : 'InputBin'
>                                   [1]                      : 'Option1'
>                                   [2]                      : 'RESDLL'
>                                   [3]                      : 'UniresDLL'
>                                   [4]                      : 'Resolution'
>                                   [5]                      : 'Option1'
>                                   [6]                      : 'PaperSize'
>                                   [7]                      : 'LETTER'
>                                   [8]                      : 'Orientation'
>                                   [9]                      : 'PORTRAIT'
>
> For PaperSize and Orientation it's quite obvious but for InputBin RESDLL or 
> Resolution it's already not
>
> 2) I have the impression that the definition of the JTEXP structure defined 
> page 372 is not complete.
> Because here is a dump of the whole extra data field:
> 00000000  44 49 4e 55 22 00 b0 00  ec 02 00 00 ba 91 73 ca
> |DINU".........s.|
> 00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
> |................|
> 00000020  00 00 00 00 00 00 00 00  00 00 00 00 05 00 00 00
> |................|
> 00000030  02 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
> |................|
> 00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
> |................|
> *
> 00000230  01 00 00 00 00 00 00 00  00 00 00 00 b0 00 00 00
> |................|
> 00000240  53 4d 54 4a 00 00 00 00  10 00 a0 00 47 00 65 00
> |SMTJ........G.e.|
> 00000250  6e 00 65 00 72 00 69 00  63 00 20 00 2f 00 20 00  |n.e.r.i.c.
> ./. .|
> 00000260  54 00 65 00 78 00 74 00  20 00 4f 00 6e 00 6c 00  |T.e.x.t.
> .O.n.l.|
> 00000270  79 00 00 00 49 6e 70 75  74 42 69 6e 00 4f 70 74
> |y...InputBin.Opt|
> 00000280  69 6f 6e 31 00 52 45 53  44 4c 4c 00 55 6e 69 72
> |ion1.RESDLL.Unir|
> 00000290  65 73 44 4c 4c 00 52 65  73 6f 6c 75 74 69 6f 6e
> |esDLL.Resolution|
> 000002a0  00 4f 70 74 69 6f 6e 31  00 50 61 70 65 72 53 69
> |.Option1.PaperSi|
> 000002b0  7a 65 00 4c 45 54 54 45  52 00 4f 72 69 65 6e 74
> |ze.LETTER.Orient|
> 000002c0  61 74 69 6f 6e 00 50 4f  52 54 52 41 49 54 00 00
> |ation.PORTRAIT..|
> 000002d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
> |................|
> 000002e0  00 00 00 00 00 00 00 00  00 00 00 00              |............|
> 000002ec
>
> As the feature options pair is a null terminated array of null terminated 
> string it seems to me that the end of the array is at 2cF and it leaves 28 
> bytes not used.
> Am I wrong ?
>
> 3) Page 372 it is stated that:
> "dwOptions: The value of this field must be the number of entries in the 
> aOptions array that are initialized.
> aOptions: This field is an array that is 512 bytes in length and contains 
> user interface selections.
> Unused fields should be initialized to zero. The meaning of the entries 
> differs for each supported printer model. Upon receipt, the checksum of this 
> array is computed and compared to dwChecksum32. The array is used only if the 
> checksums match.
> "
>
> A ndrdump of this part gives:
>                       usedoptions              : 0x00000005 (5)
>                       options: ARRAY(128)
>                           options                  : 0x00000002 (2)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>                           options                  : 0x00000000 (0)
>
> where usedoptions is dwOptions and options is aOptions.
>
> The questions are: what is the meaning of an initialized entry in the 
> aOptions array, because according to the dump we should have 5 initialized 
> entries and we have only 1 with a non null value, and what is the 
> signification of the value of the entry, is there a special meaning for each 
> entry (ie. entry #1 is for the paper size, entry #2 is for the duplex 
> capability) Also which checksum function is used how to compute it ? on which 
> data ?
>
> 4) About level 101 of getprinterdriver
> We have currently a problem when replying correctly to level 101 request in 
> getprinterdriver as the client is not downloading the drivers from the 
> server, I made a test with a windows XP acting as a print server and in this 
> case the client (also XP) is downloading the driver (see capture
> http://www.matws.net/mat/misc/xpserver_genericprinter) after the 
> getprinterdriver response.
> In capture http://www.matws.net/mat/misc/s3server_genericprinter we can see 
> that around packet 619, instead of requesting the drivers from the server (as 
> it was the case for xp) the client is requesting forms.
> Do you have an explanation for this ? what is needed as an answer from the 
> server to trigger the driver download ?
>
>
> Regards.
> Matthieu.
>
>


_______________________________________________
cifs-protocol mailing list
[email protected]
https://lists.samba.org/mailman/listinfo/cifs-protocol

Reply via email to